hasProperty() 现在与 getProperty() 和 getProperties() 方法保持一致,感谢此修复 https://bugs.php.net/bug.php?id=49719
hasProperty() 不再在父类中的私有属性返回 true。
(PHP 5 >= 5.1.2, PHP 7, PHP 8)
ReflectionClass::hasProperty — 检查属性是否已定义
name
要检查的属性的名称。
示例 #1 ReflectionClass::hasProperty() 示例
<?php
class Foo {
public $p1;
protected $p2;
private $p3;
}
$obj = new ReflectionObject(new Foo());
var_dump($obj->hasProperty("p1"));
var_dump($obj->hasProperty("p2"));
var_dump($obj->hasProperty("p3"));
var_dump($obj->hasProperty("p4"));
?>
上面的示例将输出类似于以下内容
bool(true) bool(true) bool(true) bool(false)
hasProperty() 现在与 getProperty() 和 getProperties() 方法保持一致,感谢此修复 https://bugs.php.net/bug.php?id=49719
hasProperty() 不再在父类中的私有属性返回 true。
hasProperty() 现在与 getProperty() 和 getProperties() 方法保持一致,感谢此修复 https://bugs.php.net/bug.php?id=49719
hasProperty() 不再在私有属性返回 true。
注意,此方法不能保证可以使用 ReflectionClass::getProperty() 获取属性。
ReflectionClass::hasProperty() 考虑父类(然而忽略了私有属性不会被继承),而 ReflectionClass::getProperty() 和 ReflectionClass::getProperties() 不关心继承。
(使用 PHP 5.3.0 测试)
<?php
class Foo
{
private $x;
}
class Bar extends Foo
{
//
}
$foo = new ReflectionClass('Foo');
$bar = new ReflectionClass('Bar');
var_dump($foo->hasProperty('x'); // bool(true)
var_dump($bar->hasProperty('x'); // bool(true)
var_dump(get_class($foo->getProperty('x'))); //string(18) "ReflectionProperty"
try {
$bar->getProperty('x');
} catch (ReflectionException $e) {
echo $e->getMessage(); // Property x does not exist
}
?>