Re: Call it: allow reserved words in a class or not?

From: Date: Thu, 06 Nov 2008 18:33:33 +0000
Subject: Re: Call it: allow reserved words in a class or not?
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-41736@lists.php.net to get a copy of this message
Hi!
As you know, with the new convention, the parser will not encounter T_STRING "Zend\Validate\Interface" but rather:
With namespaces, class name would not be Zend\Validate\Interface. Having namespaces, it would make much more sense to make last component a descriptive name, so you won't have code like this: if($object instanceof Interface) { // wtf am I checking here? ... As for how exactly that descriptive name should look - I guess each framework's developers that plan to support namespaces think about it hard right now. I know ZF developers do :)
Hi, Fully agreed. Though since we (PHP users) will all be using namespaces together, it makes much more sense that we have a paradigm, recommendation for namespace usage that all frameworks will follow. Maybe the ZF, Agavi, CI, CakePHP etc. authors should get together and craft a single recommendation list for people to use. It's not just a matter of consistency, it's a matter of makming the language work well with the recommended scenario and use patterns of namespaces. Two things are obvious: 1) What worked with underscores won't work with namespaces. 2) What scenario above with "instanceof Interface" isn't very likely. Why? Well imagine you want to use 5 classes in namespace foo\bar, called A, B, C, D, E (ex. foo\bar\A). In most any language with packaging system, to flatten the space you simply do this: use foo\bar\*; $a = new A(); $b = new B(); ... In PHP, due to lack of packaging system and knowledge of the user resources at parse time, instead we're painfully explicit: use foo\bar\A; use foo\bar\B; use foo\bar\C; use foo\bar\D; use foo\bar\E; $a = new A(); $b = new B(); Which makes this usage pattern with aliases much more likely to see: use foo\bar as fb; $a = new fb\A(); $b = new fb\B(); So your example above would rather be: use Zend\Validate as ZV; ... instanceof ZV\Interface; And this is why it's worth it to arrive at a single list of recommendations for namespace usage, and see what works there and what might not work, and tweak the language for it. Regards, Stan Vassilev

« previous php.internals (#41736) next »