#24543 [NEW]: private/protected class member inconsistent behavior
| From: | dafrancesch at yahoo dot com dot ar | Date: | Tue, 08 Jul 2003 18:23:50 +0000 |
| Subject: | #24543 [NEW]: private/protected class member inconsistent behavior | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-43468@lists.php.net to get a copy of this message | ||
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