#44590 [Opn->Bgs]: strange behavior of visibility

From: Date: Tue, 01 Apr 2008 18:06:27 +0000
Subject: #44590 [Opn->Bgs]: strange behavior of visibility
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-123830@lists.php.net to get a copy of this message
ID: 44590 User updated by: vituko at gmail dot com Reported By: vituko at gmail dot com -Status: Open +Status: Bogus Bug Type: Class/Object related Operating System: Debian GNU/Linux PHP Version: 5.3CVS-2008-04-01 (CVS) New Comment: Sorry, this report is bogus. I misunderstood the results I got. Previous Comments: ------------------------------------------------------------------------ [2008-04-01 16:32:36] vituko at gmail dot com The situation with methods is easier : one private method (static or not) can exclusively be accessed from the same context (class body) where it was declared. I think it is more powerfull the other way : when a class declares a method should can invoque it on an object of an inherited class. ------------------------------------------------------------------------ [2008-04-01 12:19:50] vituko at gmail dot com Description: ------------ Context visibility of inherited private attributes when they apply to child classes. When a private attribtue is inherited, it's still accessible from the context (base class) where it was declared and it becomes accessible from the child context (unidirectional visibility). But when this attribute is static (class attribute), it becomes inaccessible from every context : the base class and the child class. I don't know if it's the normal behavior, anyway I find it strange and it could be documented. Thanks Reproduce code: --------------- class a { private $v ; private static $w ; function f($c) { $c -> v = 'asdf' ; $c :: $w = 'fdsa' ; } } class b extends a { function g($c) { $c -> v = 'asdf' ; $c :: $w = 'fdsa' ; } } $a = new a() ; $b = new b() ; $a-> f($a) ; $a-> f($b) ; $b -> f($b) ; $b -> g($b) ; Expected result: ---------------- no errors Actual result: -------------- A - protected static $w ; all is ok B - private static $w ; 1 : $a-> f($a) ; -> ok 2 : $a-> f($b) ; -> Cannot access property b::$w 3 : $b -> f($b) ; -> Cannot access property b::$w 4 : $b -> g($b) ; -> Cannot access property b::$w 2,3,4 : b:$w is accessible from nowhere. The errors are not : - Access to undeclared static property - Cannot access private property ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=44590&edit=1

« previous php.bugs (#123830) next »