Req #63454 [Opn->Csd]: Inheriting static function with static variable defined in a trait.
Edit report at https://bugs.php.net/bug.php?id=63454&edit=1
ID: 63454
Updated by: nikic@php.net
Reported by: zetruger at gmail dot com
Summary: Inheriting static function with static variable
defined in a trait.
-Status: Open
+Status: Closed
Type: Feature/Change Request
Package: Class/Object related
Operating System: Xubuntu 12.04
PHP Version: 5.4.8
-Assigned To:
+Assigned To: nikic
Block user comment: N
Private report: N
New Comment:
This issue is fixed in PHP 8.1 as a result of https://github.com/php/php-src/commit/5d160e309ed207e618d49029e51c9c2dc2c5e61c.
Previous Comments:
------------------------------------------------------------------------
[2014-06-06 09:30:41] requinix@php.net
Related To: Bug #67385
------------------------------------------------------------------------
[2012-11-07 20:16:31] zetruger at gmail dot com
I think static variables must be set to default value or nulled automaticly in
the moment of defining their classes. It does not work with traits.
------------------------------------------------------------------------
[2012-11-07 19:19:18] mail+php at requinix dot net
Seems like a bug: the order of class declarations and var_dumps matters. With
class A { ... }
var_dump(A::theSameFunc());
class B extends A {}
class C extends B {}
class D extends C {}
class E extends D {}
class F extends E {}
var_dump(B::theSameFunc());
var_dump(C::theSameFunc());
var_dump(D::theSameFunc());
var_dump(E::theSameFunc());
var_dump(F::theSameFunc());
I get AAAAAA, but with
class A { ... }
class B extends A {}
class C extends B {}
class D extends C {}
var_dump(A::theSameFunc());
var_dump(B::theSameFunc());
var_dump(C::theSameFunc());
var_dump(D::theSameFunc());
class E extends D {}
class F extends E {}
var_dump(E::theSameFunc());
var_dump(F::theSameFunc());
I get ABCDDD.
------------------------------------------------------------------------
[2012-11-07 14:46:48] zetruger at gmail dot com
I suppose it's a bug isn't it?
Or is it normal behavior?
------------------------------------------------------------------------
[2012-11-07 14:32:24] laruence@php.net
it's not about triat, it's about run-time or compile-time.
the following script behavior the same as your test script:
<?php
function __autoload($ce) {
eval(<<<'PHP'
class A {
static public function theSameFunc() {
static $var = NULL;
if (is_null($var)) $var = get_called_class();
return $var;
}
}
PHP
);
}
var_dump(A::theSameFunc());
class B extends A {}
var_dump(B::theSameFunc());
?>
output:
string(1) "A"
string(1) "A"
------------------------------------------------------------------------
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=63454
--
Edit this bug report at https://bugs.php.net/bug.php?id=63454&edit=1
Thread (8 messages)