ID: 50822 User updated by: aron at zajlik dot hu Reported By: aron at zajlik dot hu Status: Bogus Bug Type: Scripting Engine problem Operating System: Mac OS X PHP Version: 5.3.1 New Comment:
Although my example (by chance) is similar to a singleton pattern, my goal was actually very different. But regardless, there is no reason why the object $my_test should be able to directly access a private variable of $tobj. Even if it were a singleton class this would not be necessary. To say my point in a different way: - In a typical singleton pattern, the instantiated object is a private property of the singleton class, so there is no problem accessing that from the class. In fact, you are able to access public properties and methods of the instantiated object from within the singleton class. - BUT there is no reason why you should be able to access a private property of that instance! Only the instance itself should have access to that... Hope I made myself clear... peace, aron Previous Comments: ------------------------------------------------------------------------ [2010-01-22 14:38:05] [email protected] Ever heard of "singleton" ? Also: http://php.net/manual/en/language.oop5.patterns.php So yes, this is expected and correct behaviour. ------------------------------------------------------------------------ [2010-01-22 12:45:36] aron at zajlik dot hu Description: ------------ I found a situation which to me seems like unexpected behavior. I private variable (as far as I know) should only be accessible within the object itself, and not by the "outside world". Yet this becomes a bit confusing once the object is created within an instance of itself. Is this a bug or is this expected behavior? Reproduce code: --------------- <? class Test{ private $variable = "asdf"; static function create_a_test(){ $tobj = new Test(); echo $tobj->variable; // Works! (which it shouldn't?!?) } } $my_test = new Test(); //echo $my_test->variable; // Returns Fatal error: Cannot access private property (which it should!) $my_test->create_a_test(); ?> Expected result: ---------------- I would expect the above code NOT to return the private variable on line 7. Actual result: -------------- The private variable can be accessed without a problem. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=50822&edit=1
