Php 对象中不存在静态属性

Php 对象中不存在静态属性,php,Php,结果是: class SubObject { static $static_a= 0; public $normal_a=0; public function __construct() { ++$this->normal_a; ++self::$static_a; } } $obj1 = new SubObject(); print_r($obj1); 我的问题是,为什么它的输出不显示为: SubObject Obj

结果是:

class SubObject
{
    static $static_a= 0;
    public $normal_a=0;

    public function __construct() {
        ++$this->normal_a;
        ++self::$static_a;
    }

}

$obj1 = new SubObject();
print_r($obj1);
我的问题是,为什么它的输出不显示为:

SubObject Object
(
    [normal_a] => 1
)
对象中是否不存在静态属性?静态变量或属性是在不同实例的上下文中保留变量值的方法吗

SubObject Object
(
    [normal_a] => 1
    [static_a] => 1
)

普通和静态是属性。转储对象时,它返回属性及其值

静态属性是类(所有实例)的属性,而不是特定实例的属性。这是另一门课

SubObject Object
(
[normal_a] => 1
[static_a] => 1
)
所有的狗都是哺乳动物,换句话说,整个“类”的狗都是哺乳动物,因此在类级别(不是在类的每个实例中)存储
$species
属性是有意义的。并非所有的狗都有相同的毛发颜色,这是一个名为“Dog”的类的特定实例的属性

因此,由设计
print\r
函数的人决定,它只打印特定于实例的属性,而不是整个类(或所有实例集)的所有属性。这个设计决策是有道理的。特别是对于那些定义了10个甚至100个要用作常量的属性的类:您不希望在每次进行调试时都看到所有这些属性

仅供参考,如果你的应用程序确实需要获取静态值,我认为这是可行的

class Dog {
    public static $species = 'mammal';
    public $furColour;

    public function __construct($furColour) {
        $this->furColour = $furColour;
   }
}
$myDog = new Dog('brown');

事实并非如此。您可以自己尝试,也可以更仔细地阅读问题:)print_r((新ReflectionClass('SubObject'))->getStaticProperties());这对我理解这个概念有很大帮助,谢谢。
print_r( (new ReflectionClass('SubObject'))->getStaticProperties() );