From: dafrancesch at yahoo dot com dot ar Operating system: Win2000 PHP version: 5CVS-2003-07-08 (dev) PHP Bug Type: Class/Object related Bug description: private/protected class member inconsistent behavior
Description: ------------ Accessing private or protected members from outside a class generate errors like: Fatal error: Cannot access private property a::$vProtected in C:\www\test\php5\class.php on line xx While accessing a private member of A from B does not. (see the example for classes A and B) I'm using the the Win32 snapshot 200307081030 Reproduce code: --------------- http://www.agendamagica.com.ar/php5/class.php.html Expected result: ---------------- I expect one of these situations: 1. A warning when you try to access a private member of A from B, and when you try to access private or protected member form outside the class. [[ Error in cosntructor of B, accessing A::vPrivate1 ]] A::show() ::vPublic = [Set in B] ::vProtected = [Set in B] ::vPrivate1 = [Set in A] ::vPrivate2 = [Set in A] B::show() ::vPublic = [Set in B] ::vProtected = [Set in B] ::vPrivate1 = [Set in B] <<-- Error accessing A::vPrivate1 ::vPrivate2 = [] <<-- Error accessing A::vPrivate2 ::vPrivate3 = [Set in B] Show $vB vB->vAny = [] vB->vPublic = [Set in B] vB->vPrivate1 = [Set in B] <<-- Error accessing A::vPrivate1 vB->vPrivate2 = [] <<-- Error accessing A::vPrivate2 vB->vPrivate3 = [] <<-- Error accessing B::vPrivate3 vB->vProtected = [] <<-- Error accessing A::vProtected 2. the actual behavior inside a class, and display nothing from outside the class (as described in http://www.php.net/zend-engine-2.php) A::show() ::vPublic = [Set in B] ::vProtected = [Set in B] ::vPrivate1 = [Set in A] ::vPrivate2 = [Set in A] B::show() ::vPublic = [Set in B] ::vProtected = [Set in B] ::vPrivate1 = [Set in B] ::vPrivate2 = [] ::vPrivate3 = [Set in B] Show $vB vB->vAny = [] vB->vPublic = [Set in B] vB->vPrivate1 = [Set in B] vB->vPrivate2 = [] vB->vPrivate3 = [] vB->vProtected = [] The first one is preferable, and is likely other OO Lenguages. Actual result: -------------- A::show() ::vPublic = [Set in B] ::vProtected = [Set in B] ::vPrivate1 = [Set in A] ::vPrivate2 = [Set in A] B::show() ::vPublic = [Set in B] ::vProtected = [Set in B] ::vPrivate1 = [Set in B] ::vPrivate2 = [] ::vPrivate3 = [Set in B] Show $vB vB->vAny = [] vB->vPublic = [Set in B] vB->vPrivate1 = [Set in B] vB->vPrivate2 = [] Fatal error: Cannot access private property b::$vPrivate3 in C:\www\test\php5\class.php on line 53 -- Edit bug report at http://bugs.php.net/?id=24543&edit=1 -- Try a CVS snapshot (php4): http://bugs.php.net/fix.php?id=24543&r=trysnapshot4 Try a CVS snapshot (php5): http://bugs.php.net/fix.php?id=24543&r=trysnapshot5 Fixed in CVS: http://bugs.php.net/fix.php?id=24543&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=24543&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=24543&r=needtrace Try newer version: http://bugs.php.net/fix.php?id=24543&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=24543&r=support Expected behavior: http://bugs.php.net/fix.php?id=24543&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=24543&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=24543&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=24543&r=globals PHP 3 support discontinued: http://bugs.php.net/fix.php?id=24543&r=php3 Daylight Savings: http://bugs.php.net/fix.php?id=24543&r=dst IIS Stability: http://bugs.php.net/fix.php?id=24543&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=24543&r=gnused