Browse Source

- Fixed bug #45139 (ReflectionProperty returns incorrect declaring class)

PHP-5.2.1RC1
Felipe Pena 18 years ago
parent
commit
fba1e9d0c5
  1. 1
      NEWS
  2. 2
      ext/reflection/php_reflection.c
  3. 58
      ext/reflection/tests/bug45139.phpt

1
NEWS

@ -1,6 +1,7 @@
PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ??? 2008, PHP 5.2.7
- Fixed bug #45139 (ReflectionProperty returns incorrect declaring class). (Felipe)
- When dumping entire document to file via asXml() don't lose the encoding.
(Ilia)
- Fixed a crash inside PDO when trying instantiate PDORow manually (Felipe)

2
ext/reflection/php_reflection.c

@ -4081,7 +4081,7 @@ ZEND_METHOD(reflection_property, getDeclaringClass)
prop_name_len = strlen(prop_name);
ce = tmp_ce = ref->ce;
while (tmp_ce && zend_hash_find(&tmp_ce->properties_info, prop_name, prop_name_len + 1, (void **) &tmp_info) == SUCCESS) {
if (tmp_info->flags & ZEND_ACC_PRIVATE) {
if (tmp_info->flags & ZEND_ACC_PRIVATE || tmp_info->flags & ZEND_ACC_SHADOW) {
/* it's a private property, so it can't be inherited */
break;
}

58
ext/reflection/tests/bug45139.phpt

@ -0,0 +1,58 @@
--TEST--
Bug #45139 (ReflectionProperty returns incorrect declaring class)
--FILE--
<?php
class A {
private $foo;
}
class B extends A {
protected $bar;
private $baz;
private $quux;
}
class C extends B {
public $foo;
private $baz;
protected $quux;
}
$rc = new ReflectionClass('C');
$rp = $rc->getProperty('foo');
var_dump($rp->getDeclaringClass()->getName()); // c
$rc = new ReflectionClass('A');
$rp = $rc->getProperty('foo');
var_dump($rp->getDeclaringClass()->getName()); // A
$rc = new ReflectionClass('B');
$rp = $rc->getProperty('bar');
var_dump($rp->getDeclaringClass()->getName()); // B
$rc = new ReflectionClass('C');
$rp = $rc->getProperty('bar');
var_dump($rp->getDeclaringClass()->getName()); // B
$rc = new ReflectionClass('C');
$rp = $rc->getProperty('baz');
var_dump($rp->getDeclaringClass()->getName()); // C
$rc = new ReflectionClass('B');
$rp = $rc->getProperty('baz');
var_dump($rp->getDeclaringClass()->getName()); // B
$rc = new ReflectionClass('C');
$rp = $rc->getProperty('quux');
var_dump($rp->getDeclaringClass()->getName()); // C
?>
--EXPECT--
string(1) "C"
string(1) "A"
string(1) "B"
string(1) "B"
string(1) "C"
string(1) "B"
string(1) "C"
Loading…
Cancel
Save