Re: [RFC] [Discussion] Namespaces in Core

From: Date: Sat, 10 Jun 2017 19:24:43 +0000
Subject: Re: [RFC] [Discussion] Namespaces in Core
References: 1 2 3 4  Groups: php.internals 
Request: Send a blank email to internals+get-99481@lists.php.net to get a copy of this message
On Sat, Jun 10, 2017 at 1:13 PM, Fleshgrinder <php@fleshgrinder.com> wrote: > On 6/10/2017 8:54 PM, Levi Morrison wrote: >> I gave this feedback before but I'll repeat it. I support namespaces >> in the core, with the PHP namespace (with whatever >> capitalization we >> decide) to be reserved *solely* for things related to the language >> itself such as lexer, parser, etc. >> >> I am fine with other extensions using namespaces but should use >> appropriately named ones. Using the PHP namespace to >> indicate >> something is packaged in core is a poor decision. We have moved >> existing extensions into core and it would not make sense to rename it >> simply because it was moved into core because it's a backwards >> compatibility break. Similarly we've moved at least one extension out >> of core and it doesn't make sense for it to have the >> PHP name when >> it's not in core, but renaming it is yet other backwards compatibility >> break. It's simply not prudent. Instead extensions should be named >> after what they are, the vendor they are for, or some other name; this >> is the same process user-land packages go through and core should not >> be different. >> > > Thanks for that, much appreciated. > > This is exactly what I am proposing. Only things that are provided > directly from the PHP Group should go into the PHP namespace. Any- and > everything else should go into appropriate vendor namespaces. > > I think that you are considering e.g. array functions as not being part > of PHP, and that you want to put them in a separate namespace. So > effectively we would have something like: > > PHP\Lexer > Arrays\Array > IO\File > Logging\Logger > Reflection\Reflector > Strings\String > UUIDs\UUID > > I personally do not like this approach. PHP is the vendor of these > things, thus, it should reside in the namespace of the vendor. Same > rules for everyone. IO for instance is not a vendor, it is a particular > use-case (working with files) and thus should not go directly into the > global namespace. > > There is imho no reason to move PHP\Reflection\Reflector to > Reflection\Reflector just because we decided, for whatever > reason, to > remove reflection from core and instead providing it via PECL. PHP would > still be the vendor of it. > > The misconception that I am seeing is, that the PHP namespace is bound > to PHP, which it isn't: it is the vendor namespace of the PHP Group. > > The PHP community at large has settled with this approach, and I believe > that it is a very good approach. It effectively avoids namespace > collisions and helps to identify the vendor of a particular implementation. > > Would love to hear what others think about this. > > -- > Richard "Fleshgrinder" Fussenegger > If we were starting from scratch maybe we'd do as you are proposing. However, there is absolutely zero value in these specific things being namespaced *anywhere*: - Arrays - Reflection - Strings - IO We already have established conventions and prefixes around these. Moving them to a namespace has zero value. I'm not sure what logging you are talking about for PHP. That leaves UUID, which I am fine with having its own namespace if there are enough functions, constants, classes, etc to support it.

« previous php.internals (#99481) next »