Namespaces in PHP
During Stefan Priebsch' session at the Dutch PHP Conference on PHP 5.3 and PHP 6 - A look ahead a discussion popped up about PHP's namespace support. One of the things that came up is the conflicts that can arise with internal classes.
Take for example this code:
<?php use PEAR::Date::Interval as Interval; ?>
In PHP 5.3 this would alias the class Interval in the namespace PEAR::Date to the class Interval. For now, this code would work just fine. However, if PHP would introduce a class "Interval" at some point in the future (and PHP can do this as it owns the global namespace ) then the above code would suddenly stop working. So in order to use namespaces properly, you always need to have at least two elements left, like:
<?php use PEAR::Date as pd; $interval = new pd::Interval; ?>
You need to make sure of course that the short name that you pick is something that does not sound to much like a class name otherwise you'll have exactly the same issue. It's not very likely that PHP will introduce a class pd though.
Comments
I think we should extend the userland naming guide for 5.3 with a warning on this point.
and obscure naming conventions suddenly return.
sigh
Hi,
It is important to note that with the current namespace design, this issue only occurs if your code is non-namespaced. The following code will continue to work ad infinitum:
The only case to worry about would be a user class named Interval in the namespace Date, but again this would be a problem no matter what, which is why when you choose a namespace prefix, it is wise to choose one that is not a common name (like PEAR2, for instance)
This is why I suggest that all code using namespaced code should pop a "namespace __user__;" at the top, and PHP reserve the __user__ namespace for top-level code.
Of course, there is a still some time to closely review the namespace implementation, as the gotchas are fierce if you don't properly import namespaced classnames with the "use" keyword. I highly suggest all smart people apply themselves to some of the harder problems raised, such as the order of resolution of unqualified names like "Interval" (::Date::Interval is a fully qualified name because it starts with ::)
Thanks for this Derick. Informative.
-
C
I have raised this problem about 6 months ago in comments to this manual page http://php.net/manual/en/language.namespaces.rules.php
However, my comment was deleted! You can see that the only comment on that is referencing the deleted one.
And, finally, regarding this "workaround". It is not 100% safe, and as well as the inability of PHP5.3 to do "use some::namespace::*" will often result in more typing (compared to pear-like naming), as several bloggers have pointed out in the past.
Dennis, that's because such things should not end up in comments in the manual. You should instead have brought it up on the php-internals mailing list.
This problem also exists in other C style programming languages. A potential solution, its to use a separate operator for classes and for namespaces, e.g. ¨MyNamespace!!Anything¨ and ¨MyClass::Anything¨
In reply to mramirez: This is not a problem of "C style programming languages". The problem is that the C programmers know only the C++ namespace implementation. :)
Life Line
Black-tailed Godwit Smooching About
At RSPB Titchwell Marsh, there are many different habitats. This one has many muddy flats, and different species.
This bird was being chased by a fellow bird, and landed almost straight in front of the hide, with the light just being right.
#photography #Birds #BirdPhotography #BirdsOfFediverse #NaturePhotography #wildlife #Norfolk #RSPB #TitchwellMarsh
A Ruddy Turnstone Turning Over Stones On The Beach
A bunch of them were turning over things on Hunstanton Beach to see if there were any grubs to eat.
#photography #Birds #BirdPhotography #BirdsOfFediverse #NaturePhotography #wildlife #Norfolk
I've just donated blood again, for the first time in a while (for reasons). Now for the best thing, the free snacks!
Updated a restaurant and a pharmacy
Updated a fast_food
Created a defibrillator
Flock of Spoonbills
About 20 of them were flying over, but these made a nice pattern.
#photography #Birds #BirdPhotography #BirdsOfFediverse #NaturePhotography #wildlife #Norfolk
Survey wheelchair accessibility of public transport platforms
Specify street/place names to addresses
Survey housenumbers
Determine the heights of kerbs at crossings
Survey postbox collection times
Specify whether roads have sidewalks
Specify whether roads have lane markings
Specify whether there are cycleways
Specify whether crosswalks have tactile paving
Specify whether pedestrian crossings have markings
Survey opening hours
Specify board types
Specify cycle barrier installation
Specify cycle barrier types
Specify drinking water types
Determine whether any glass or just glass bottles can be recycled here
Specify width of opening
Specify road surfaces




Shortlink
This article has a short URL available: https://drck.me/ni-php-6d3