On Tue, Apr 23, 2024 at 10:21 AM Bilge <bi...@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.

Reply via email to