php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #45743 property_exists fails to find static protected member in child class
Submitted: 2008-08-07 09:57 UTC Modified: 2008-08-19 19:58 UTC
From: ilewis at uk dot ibm dot com Assigned: felipe (profile)
Status: Closed Package: Class/Object related
PHP Version: 5.3CVS-2008-08-07 (snap) OS: Fedora 8
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: ilewis at uk dot ibm dot com
New email:
PHP Version: OS:

 

 [2008-08-07 09:57 UTC] ilewis at uk dot ibm dot com
Description:
------------
property_exists() doesn't find a member in a child class when the member is static and protected.

The code below shows that the member is accessible and should be found by property_exists.

I've created a patch which I think fixes this, and put it here:

http://pastebin.com/m272f815c

The patch was built against a CVS snap from today:
php5.3-200808070630



Reproduce code:
---------------
<?php
class aParent {
  public static function staticTest() {
    var_dump(property_exists("A", "prot"));
    var_dump(A::$prot);  
  }
}

class A extends aParent { protected static $prot = "prot"; }

echo "\nparent scope:\n";
aParent::staticTest();
?>

Expected result:
----------------
parent scope:
bool(true)
string(4) "prot"

Actual result:
--------------
parent scope:
bool(false)
string(4) "prot"

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2008-08-07 10:18 UTC] jani@php.net
Send patches in unified diff format. (diff -u)
 [2008-08-07 12:36 UTC] ilewis at uk dot ibm dot com
I've put an updated diff -u output on pastebin:

http://pastebin.com/m43078aa5

I've also realised that this fix breaks testcase Zend/tests/bug42211.phpt, but I think this is a bug in the testcase, that is, it is testing for the broken behaviour.

I've put a patch for the testcase on pasetbin as well

http://pastebin.com/m15c01dec
 [2008-08-15 01:00 UTC] php-bugs at lists dot php dot net
No feedback was provided for this bug for over a week, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
 [2008-08-18 10:20 UTC] ilewis at uk dot ibm dot com
re-opening as I've submitted an updated patch
 [2008-08-18 16:51 UTC] felipe@php.net
In fact, the property_exists() behave differently than method_exists().
 [2008-08-18 17:50 UTC] felipe@php.net
This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.

I've fixed the property_exists() behavior in 5_3 and HEAD. It now checks the existence, not the accessibility. (like the method_exists())

Thanks.
 [2008-08-19 08:11 UTC] ilewis at uk dot ibm dot com
That seems like a good fix, but the behaviour is now inconsistent with the docs :-) 

"This function checks if the given property exists in the specified class (and if it is accessible from the current scope)"

I guess that needs fixing up as well?
 [2008-08-19 11:01 UTC] felipe@php.net
Sure, I've fixed it now, too. 

Thanks.
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Sun Feb 02 17:01:31 2025 UTC