2008/6/26 Derick Rethans derick@php.net:
Derick Rethans wrote:
it won't be a serious 'wtf', as on the top of the file, there
would be some kind of use MySuperLibrary::DateTime;I know, but 400 lines down in the code you can't really see that.
This addition might fix the immediate issue - but it doesn't make
life easier for the developers that have to maintain the code. Even
less if they're not aware that stuff is namespaced.If we don't allow it to work this way, then I really don't see the
point in namespaces at all, which I assume is the point you are trying
to make.Actually, the point that I was trying to make is that we instead of
encouraging this confusion, we should put somewhere in our userland
nameing guidelines that you still would need to provide a prefix to your
(aliased) classnames in order to prevent confusion. But that then
seriously means I see no real good reason still why people want
namespaces with confusing resolving rules (concerning static methods
like Greg points out).regards,
Derick--
Derick Rethans
http://derickrethans.nl | http://ezcomponents.org | http://xdebug.org--
How bad would it be to say that namespacing can only apply to classes and
not normal functions?
So.
class::static();
namespace::class::static();
namespace::namespace::class::static();
they always work.
namespace::function() would fail as namespace would be seen as class.
If a class and a namespace share the same name ...
namespace::function() vs class:static()... how is anyone, let alone PHP,
going to know. It can't. If both forms relate to a valid entity, then it is
always a guess as to which is intended.
You could make namespace:: have a higher precedence than class:: (or the
other way around). But that feels like a fudge rather than a fix.
So, maybe, in the short tem, namespacing only applies to classes.
It was my understanding that one of the primary reasons for introducing
namespacing was to protect against userland_class vs builtin_class
collision.
Regards,
Richard Quadling.
--
Richard Quadling
Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731
"Standing on the shoulders of some very clever giants!"
Richard Quadling wrote:
How bad would it be to say that namespacing can only apply to classes and
not normal functions?
i don't see namespacing as an OO only feature, IMHO it is a perfectly
valid and useful thing for pure procedural code, too
not having namespacing for procedural functions would leave
the old ugly concept of bundling functions as static methods within
dummy wrapper classes as only option for procedural name space
emulation ... which AFAIR was one of the things we wanted to get
rid of way back when the whole namespace idea first materialized?
--
Hartmut Holzgraefe, MySQL Regional Support Manager EMEA
Sun Microsystems GmbH, Sonnenallee 1, 85551 Kirchheim-Heimstetten
Amtsgericht Muenchen: HRB161028
Geschaeftsfuehrer: Thomas Schroeder, Wolfgang Engels, Dr. Roland Boemer
Vorsitzender des Aufsichtsrates: Martin Haering
2008/6/26 Hartmut Holzgraefe hartmut@mysql.com:
Richard Quadling wrote:
How bad would it be to say that namespacing can only apply to classes and
not normal functions?
i don't see namespacing as an OO only feature, IMHO it is a perfectly
valid and useful thing for pure procedural code, toonot having namespacing for procedural functions would leave
the old ugly concept of bundling functions as static methods within
dummy wrapper classes as only option for procedural name space
emulation ... which AFAIR was one of the things we wanted to get
rid of way back when the whole namespace idea first materialized?
Ok. I see your point and the idea of grouping related functionality into a
dummy class full of statics does feel wrong when there is no other benefit,
but from a userland code's perspective
namespace::function()
looks JUST like
ugly_bundled_class::static()
Internally, sure, they are completely different, but from a users
perspective, they are the same thing. Same amount of typing. Same syntax.
Nothing to differentiate.
So the issue to namespace::function() vs class::static() remains.
As I see it either precedence is the answer (user namespaces first, internal
namespaces next and global namespace being last) or a different symbol for
namespace.
Maybe namespace:::function() vs class::static().
Would that be enough?
Richard.
--
Richard Quadling
Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731
"Standing on the shoulders of some very clever giants!"
How bad would it be to say that namespacing can only apply to classes and
not normal functions?
Lame, very lame. It would make them unusable for many distributed
projects that are not 100% OOP. Wordpress comes to mind. My own Phorum
as well.
It was my understanding that one of the primary reasons for introducing
namespacing was to protect against userland_class vs builtin_class
collision.
No, that is the OOP propaganda machine at work. Don't listen to the OOP
machine. It lies. =)
Brian.
How bad would it be to say that namespacing can only apply to classes and
not normal functions?Lame, very lame. It would make them unusable for many distributed
projects that are not 100% OOP. Wordpress comes to mind. My own Phorum
as well.
I agree, namespaces need to work for all definition types.
I don't see a problem here:
- ns1::ns2::class::static() and ns1::ns2::namespace::func() is a
collision - why is it a collision? because we have a class and subnamespace in the
same namespace, with the same names. - solution therefore is to NOT allow this collision, and end with an error.
[Example 1]
namespace a::b::c;
function foo() {}
namespace a::b;
class c {} // FATAL ERROR: class collision with existing namespace
"a::b::c"
[Example 2]
namespace a::b;
class c {}
namespace a::b::c; // FATAL ERROR: namespace collision with existing class
"a::b::c"
function foo() {}
So now, while the syntax may still be ambiguos if a codeline is cut and
pasted alone in a blank text file, at least in context it can do only one
thing: call whatever the user defined/imported/included. If there's a
collision, he'll see the error, and take action.
Hey all,
honestly, it is not my intention to raise a new flamewar, but aren't
most of these ambiguity problems we talk about due to the fact that ::
is used as the namespace separator?
Regards,
Stefan
--
e-novative> - We make IT work for you.
e-novative GmbH - HR: Amtsgericht München HRB 139407
Sitz: Wolfratshausen - GF: Dipl. Inform. Stefan Priebsch
http://www.e-novative.de - GnuPG Key: 0x7DB67F7F
2008/6/26 Stefan Priebsch stefan.priebsch@e-novative.de:
Hey all,
honestly, it is not my intention to raise a new flamewar, but aren't most
of these ambiguity problems we talk about due to the fact that :: is used as
the namespace separator?Regards,
Stefan
I think so. Considering this IS a new facility I can't see why having 3
:'s wouldn't be a good solution.
namespace:::class::static()
namespace:::function()
No confusion. Clearly defined. No collision.
--
e-novative> - We make IT work for you.
e-novative GmbH - HR: Amtsgericht München HRB 139407
Sitz: Wolfratshausen - GF: Dipl. Inform. Stefan Priebschhttp://www.e-novative.de - GnuPG Key: 0x7DB67F7F
--
--
Richard Quadling
Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731
"Standing on the shoulders of some very clever giants!"
No confusion. Clearly defined. No collision.
... except possibly between the eyes...
We had this discussion ad infinitum in the past. Please, not again?
- Steph