Php 为什么下面的代码输出2而不是1?

Php 为什么下面的代码输出2而不是1?,php,Php,我最近在一次采访中偶然发现了这个问题。我不知道正确的答案。我不明白为什么PHP输出2而不是1 class a { public static $myvar; function __construct($x = 1) { self::$myvar = $x; } } class b extends a { public static $myvar; function __construct($x = 2) {

我最近在一次采访中偶然发现了这个问题。我不知道正确的答案。我不明白为什么PHP输出2而不是1

class a
{
    public static $myvar;
    function __construct($x = 1)
    {
        self::$myvar = $x;
    }
}

class b extends a
{
    public static $myvar;

    function __construct($x = 2)
    {
        self::$myvar = $x;
        parent::__construct();
    }
}

$obj = new b();
echo $obj::$myvar;

公共静态$myvar
在每个类中声明。这就是为什么
A::myvar
B::myvar
不同的原因。我不明白。如果I var_在'a'构造函数中转储$x,它将输出2…不,它不会;不过我得到了你大部分的答案。您指的是后期静态绑定。为什么在这两个类中都声明
public static$myvar
?仅在父类中声明,它也将在子类中可用。
public static$myvar
在每个类中声明。这就是为什么
A::myvar
B::myvar
不同的原因。我不明白。如果I var_在'a'构造函数中转储$x,它将输出2…不,它不会;不过我得到了你大部分的答案。您指的是后期静态绑定。为什么在这两个类中都声明
public static$myvar
?仅在父类中声明,它也将在子类中可用。