Re: PDO subclass names
| From: | Lynn | Date: | Tue, 23 Apr 2024 08:36:20 +0000 |
| Subject: | Re: PDO subclass names | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-123173@lists.php.net to get a copy of this message | ||
On Tue, Apr 23, 2024 at 10:21 AM Bilge <bilge@scriptfusion.com> wrote:
> On 21/04/2024 14:00, Saki Takamachi wrote:
> > Hi internals,
> >
> > Recently I've been working on an RFC regarding object support for
> BCMath. While working on that, I learned of the following RFC:
> > https://wiki.php.net/rfc/namespaces_in_bundled_extensions
> >
> > If we follow this RFC, is it reasonable to place subclasses of PDO under
> the namespace "PDO”?
> >
> > e.g.
> > ```
> > PdoMysql => PDO\Mysql
> > PdoPgsql => PDO\Pgsql
> > PdoSqlite => PDO\Sqlite
> > PdoOdbc => PDO\Odbc
> > PdoDblib => PDO\Dblib
> > PdoFirebird => PDO\Firebird
> > ```
> >
> > We'll probably get a BC Break if try to fix this after 8.4 is released,
> so before it's released is last chance to fix this safely.
> >
> > If Tim's RFC under discussion is passed, the namespace will be "Pdo"
> instead of "PDO”.
> > https://wiki.php.net/rfc/class-naming-acronyms
> >
> > I would appreciate hearing your opinions.
> >
> > Regards,
> >
> > Saki
>
> Hi Saki,
>
> Consider that adding a namespace does not/should not change the class
> name. That is,
MyClass once namespaced becomes
> MyNamespace\MyClass.
> Ergo, PdoMysql becomes
> Pdo\PdoMysql. The class name should still
> make sense and be a "strong name" (without conflict) once imported.
>
> To state it more concretely, I believe it is normal and correct to
> include 1-3 namespace components within the class name itself, in order
> to create such a "strong name". As a more concrete example of this,
> consider HttpClient, FtpClient
> and SoapClient. Far too often, we
> see user libraries (incorrectly) namespace these as
> Http\Client,
> Ftp\Client and Soap\Client (or
> similar) where the leaf name just
> becomes Client. "Client", by itself is a meaningless
> moniker, but that
> is all we see once the name is imported, notwithstanding importing
> multiple of these clients in one file causes conflicts that now need to
> be resolved with local aliases. In general, I believe aliasing to be an
> anti-pattern that points to a failure to create strong names and thus
> should be avoided by including some of the namespace portion in the
> class name to make the class name more meaningful. Once imported, we do
> not see the namespace portion within the body of the file any more;
> HttpClient and FtpClient make
> much more sense by themselves, whether
> or not they would otherwise conflict.
>
> Kind regards,
> Bilge
>
The code base I work in has 25 classes that are called "Line". They have
namespaces like App\Model\Invoice\Line, this is cumbersome to work with
so I would also prefer something like Pdo\PdoMysql, even if it's not
likely to conflict with a name such as Mysql.