在编程和类的上下文中,static
通常并不意味着它不会改变,而是意味着它不依赖于类的实例。例如在 Java 中finally
意味着它不会改变
如果它们包含在类的实例中,那就太奇怪了。
因此,即使 PHP 允许您使用 $inst::$v 访问 $v,它仍然访问类的变量而不是对象变量。
class A
{
static $v;
}
A::$v = '1';
echo A::$v; /* outputs '1' */
$inst = new A();
echo $inst::$v; /* outputs '1' (this should never be the way to access static vars)*/
$inst::$v = '2';
echo $inst::$v; /* outputs '2' (this should never be the way to access static vars)*/
echo A::$v; /* outputs '2' */
如果你真的想要你自己编写的静态属性:
class A
{
static $v = 'VV';
public $b = 'BB';
}
function export_all($o)
{
return array_merge(get_object_vars($o), get_class_vars(get_class($o)));
}
$c = new A();
var_dump(export_all($c));
outputs:
array(1) { ["b"]=> string(2) "BB" } array(2) { ["b"]=> string(2) "BB" ["v"]=> string(2) "VV" }
如果你还想要私有变量,你必须在类中调用它,你必须在类中添加这样的东西:
public function export_it() {
return array_merge(get_object_vars($this), get_class_vars(get_class($this)));
}