- PHP 手册
- 函数参考
- 变量与类型相关扩展
- 反射
- ReflectionClass
ReflectionClass::getStaticPropertyValue
(PHP 5 >= 5.1.2, PHP 7, PHP 8)
ReflectionClass::getStaticPropertyValue — 获取静态(static)属性的值
说明
public ReflectionClass::getStaticPropertyValue(string$name
, mixed &$def_value
= ?): mixed
获取这个类里静态(static)属性的值。
参数
-
name
-
静态属性的名称,来返回它的值。
-
def_value
-
假如类没有定义
name
的 static 属性,将返回一个默认值。 如果属性不存在,并且省略了此参数,将会抛出 ReflectionException 。
返回值
静态属性的值。
范例
示例 #1 ReflectionClass::getStaticPropertyValue() 的基本用法
<?php
class Apple {
public static $color = 'Red';
}
$class = new ReflectionClass('Apple');
var_dump($class->getStaticPropertyValue('color'));
?>
以上例程会输出:
string(3) "Red"
参见
- ReflectionClass::getStaticProperties() - 获取静态(static)属性
- ReflectionClass::setStaticPropertyValue() - 设置静态属性的值
User Contributed Notes 2 notes
up down 6 Antares ¶10 years ago
It seems this method has a security level different from the getStaticProperties method.
If you make two classes A and B looking like
<?php
class A{
protected static $static_var='foo';
public function getStatic(){
$class=new ReflectionClass($this);
return $class->getStaticPropertyValue('static_var');
}
public function getStatic2(){
$class=new ReflectionClass($this);
$staticProps=$class->getStaticProperties();
return $staticProps['static_var'];
}
public function __construct(){
echo $this->getStatic2();
echo $this->getStatic();
}
}
class B extends A{
protected static $static_var='foo2';
}
?>
Then the output will be an exception for the getStatic() call, when the getStatic2() will correctly return 'foo2';
up
down
-1
Mauro Gabriel Titimoli ¶12 years ago
If you want to change a static property of a variable class...
PHP 5.2
<?php
$reflection = new ReflectionClass($className);
$staticPropertyReference = & $reflection->getStaticPropertyValue($staticPropertyName);
$staticPropertyReference = 'new value';
?>
PHP 5.3
<?php
$className::$$classProperty
?>
add a note
官方地址:https://www.php.net/manual/en/reflectionclass.getstaticpropertyvalue.php