Re: Re: Namespace resolution rules has been changed?

From: Date: Mon, 10 Nov 2008 22:11:40 +0000
Subject: Re: Re: Namespace resolution rules has been changed?
References: 1 2 3 4  Groups: php.internals 
Request: Send a blank email to internals+get-41841@lists.php.net to get a copy of this message
I understand this new behaviour is same as using "relative paths", but there is a common best practise to not make dependencies form topper namespaces to deeper ones. So it is rare to have class Company\Software\Base extending Company\Software\Web\Forms\Control (i.e. Base extends Web\Forms\Control), and it is common have class Company\Software\Web\Forms\Control extending Company\Software\Base. So in real world it means that nearly every usage of "partially qualified indentifiers" (Sub\Object) have to be written with preceding backslash. David Grudl
Can you please point us to an example describing this best practice? Aside from this, the problem is: scopes. In other languages we don't have preceding separators and those conflicts hence don't exist, since with scopes, if a name doesn't exist in the local scope, it's automatically bubbled up until it goes right back to the global scope. In PHP nothing bubbles, hence this doesn't work. We have just one exception to this, with global functions in local space which "bubble up" to global even without the prefix (which I believe will come to bite us later on). However there's still one more issue, "use" clauses only understand full symbol names, which causes yet another inconsistency: namespace foo; use bar\baz as bar_baz; $a = new bar\baz(); //instantiates class with absolute path "foo\bar\baz" $b = new bar_baz(); //instantiates class absolute path "bar\baz" In fact, use doesn't even know what the prefix would mean: use \bar\baz; // parse error So it has to be decided which way the system goes to avoid confusion and bugs IMO. Regards, Stan Vassilev

« previous php.internals (#41841) next »