Edit report at https://bugs.php.net/bug.php?id=55839&edit=1
ID: 55839
User updated by: chris at mcfadyen dot ca
Reported by: chris at mcfadyen dot ca
Summary: Static accessors through variables only work on
simple variables
Status: Bogus
Type: Bug
Package: Class/Object related
Operating System: Windows
PHP Version: 5.3SVN-2011-10-03 (SVN)
Block user comment: N
Private report: N
New Comment:
It's not supposed to reference $b, it's supposed to reference the class B
$b::foo() is de-referenced as B::foo()
Why would ${$a->referrer}::foo() not de-reference to B::foo() as well?
To make it more obvious so that you can't misinterpret it:
class ClassOne {
public $referrer = 'ClassTwo';
}
class ClassTwo {
public static function foo() {
echo "Foo";
}
}
$a = 'ClassTwo';
$b = new ClassOne();
$a::foo();
${$b->referrer}::foo();
$c = $b->referrer;
$c::foo();
Which gives the notice "Undefined variable: ClassTwo"
Previous Comments:
------------------------------------------------------------------------
[2011-10-03 18:53:33] [email protected]
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php
Variable names are case-sensitive. $B is not the same as $b.
${$a->referrer}::foo(); in your case is the same as $B::foo()m not $b::foo();
------------------------------------------------------------------------
[2011-10-03 18:47:14] chris at mcfadyen dot ca
Description:
------------
Using a static operator ( :: ) works for simple variables ( $foo::function() ),
but results in an undefined variable warning for the class name at run-time
when
using a class property ( ${$bar->foo}::function() ). Obviously, a direct
access
attempt ( $bar->foo::function() ) fails with a parse error.
---
>From manual page: http://www.php.net/language.oop5.static
---
Test script:
---------------
class A {
public $referrer = 'B';
}
class B {
public static function foo() {
echo "Foo";
}
}
$b = 'B';
$a = new A();
$b::foo();
${$a->referrer}::foo();
$c = $a->referrer;
$c::foo();
Expected result:
----------------
I would expect to see
Foo
Foo
Foo
Actual result:
--------------
This is the result:
Foo
Notice (8): Undefined variable: B
Foo
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=55839&edit=1