Bug #68485 [Nab]: late namespace resolution with cross-namespace inheritance missing
Edit report at https://bugs.php.net/bug.php?id=68485&edit=1
ID: 68485
Updated by: requinix@php.net
Reported by: llmll at gmx dot de
Summary: late namespace resolution with cross-namespace
inheritance missing
Status: Not a bug
Type: Bug
Package: Class/Object related
Operating System: any
PHP Version: 5.5.19
-Block user comment: No
+Block user comment: Yes
Private report: N
New Comment:
https://gist.github.com/requinix/c3a576a5a8953d26da02
I've said all I can on this and there is no point trying to continue this debate. If I still
haven't hit upon the right combination of words and explained to you why you're mistaken
and why there is no bug then I doubt I ever could and you need to find somebody else willing to try.
http://php.net/support.php
Previous Comments:
------------------------------------------------------------------------
[2014-11-24 13:06:18] llmll at gmx dot de
As written before this is a breach. The documentation is clear and consistent: Resolution is done at
runtime, and -regarding your quote- respects the current namespace context, so in my example at
runtime the instance is in \Beta namespace and this namespace and it's class should be used.
That is the only logical and deterministic way to interpret the call to Helper::$Value. Other
languages follow this priciple.
So IMHO this remains a serious flaw, because PHP does not behave like expected and documented. You
may call it a missing feature, though, that does not change the facts I pointed out.
------------------------------------------------------------------------
[2014-11-24 08:32:44] requinix@php.net
Hmm. Compile-time for imports and HHVM seems to do it at compile-time regardless <http://3v4l.org/Ec0jL/bytecode#tabs>. I guess I
assumed it was compile-time for everything.
Regardless, the class name still isn't resolved that way. Did you see the next line? "It
looks for a class from the current namespace: A\B\C."
- It had just said that A\B was where the "call" was
- There is no mention of any other code anywhere else - including code calling the code being
executed
Now, can we call this resolved? I'm sorry about the mix-up but it simply does not work the way
you thought it did. And frankly I'm glad it doesn't because such a scheme would be very
confusing and awkward.
------------------------------------------------------------------------
[2014-11-24 07:29:37] llmll at gmx dot de
Sorry, but you are wrong again. Please double check your own PHP documentation, where it says:
"Inside namespace (say A\B), calls to **unqualified** or qualified class names (not fully
qualified class names) are resolved at **run-time**. ".
This describes exactly what I am expecting.
------------------------------------------------------------------------
[2014-11-24 00:51:13] requinix@php.net
There is no inheritance in the first place. "Helper::$Value" does not work as a relative
path but is merely shorthand for writing "\Alpha\Helper::$Value", and was resolved as such
at compile-time.
The feature you're trying to report a bug for *does not exist*.
------------------------------------------------------------------------
[2014-11-23 23:59:53] llmll at gmx dot de
The example shows a clear breach in namespace/inheritance logic - this qualifies as bug.
As you explain a mere c&p of the method to the new class would resolve the issue. I remeber
reading nearly the same tips here, when LSB wasn't there and people claimed __CLASS__ was
sufficient for everything and for everything else just c&p. I personally stay away from hackish
tricks, the important namespace functionality should be consistent. So my suggestion is focusing on
the problem not the alternatives.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=68485
--
Edit this bug report at https://bugs.php.net/bug.php?id=68485&edit=1
Thread (10 messages)