PHP Conference Japan 2024

ReflectionClass::hasProperty

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

ReflectionClass::hasProperty检查属性是否已定义

描述

public ReflectionClass::hasProperty(string $name): bool

检查是否定义了指定的属性。

参数

name

要检查的属性的名称。

返回值

如果具有该属性,则返回true,否则返回false

示例

示例 #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)

参见

添加注释

用户贡献的注释 3 个注释

dalguete at gmail dot com
3 年前
由于此修复程序 https://bugs.php.net/bug.php?id=49719,hasProperty() 现在与 getProperty() 和 getProperties() 方法一致。

hasProperty() 现在不再从父类中返回私有属性的 true。
dalguete at gmail dot com
3 年前
由于此修复程序 https://bugs.php.net/bug.php?id=49719,hasProperty() 现在与 getProperty() 和 getProperties() 方法一致。

hasProperty() 现在不再返回私有属性的 true。
rwilczek at web-appz dot de
15 年前
请注意,此方法不能保证您可以使用 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
}
?>
To Top