hasProperty() now is consistent with getProperty() and getProperties() methods, thanks to this fix https://bugs.php.net/bug.php?id=49719hasProperty() no longer returns true in private properties from parent classes.
(PHP 5 >= 5.1.2, PHP 7, PHP 8)
ReflectionClass::hasProperty — Checks if property is defined
Checks whether the specified property is defined.
name
Name of the property being checked for.
Beispiel #1 ReflectionClass::hasProperty() example
<?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"));
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
bool(true) bool(true) bool(true) bool(false)
hasProperty() now is consistent with getProperty() and getProperties() methods, thanks to this fix https://bugs.php.net/bug.php?id=49719hasProperty() no longer returns true in private properties from parent classes.
Note, that this method does not guarantee, that you can get a property with ReflectionClass::getProperty().ReflectionClass::hasProperty() considers the parent classes (ignoring however, that a private property is not inherited), while ReflectionClass::getProperty() and ReflectionClass::getProperties() don't care about inheritance.(Tested with PHP 5.3.0)<?phpclass 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}?>
hasProperty() now is consistent with getProperty() and getProperties() methods, thanks to this fix https://bugs.php.net/bug.php?id=49719hasProperty() no longer returns true in private properties.