php覆盖类内部加载的类

时间:2018-04-24 08:01:01

标签: php

我的课程:

<?php

class a {

    private static $b;

    function __construct() {
        self::$b=rand(1000,9999);
    }

    function get_c() {
        $vv= new a();
        echo $vv->get_bb();
    }

    public function get_bb() {
       return self::$b;
    }   
}

然后如果我使用它:

$c1  =  new a;

echo $c1->get_bb();
echo "\n";
echo $c1->get_c();
echo "\n";
echo $c1->get_bb();
echo "\n";

它返回:

4468
6007
6007   <=== WHY??  why not 4468 ?

我的班级owerwrite班......

我不明白!请帮帮我!

  

PHP 5.4.45-0 + deb7u12(cli)(建于:2018年1月20日13:49:38)

1 个答案:

答案 0 :(得分:2)

在您的class a中,$b属性为static。这意味着$b的所有实例化只有一个class a。请参阅:http://php.net/manual/en/language.oop5.static.php

因此,当第一次执行$c1->get_bb();时,将返回$b的全局实例化期间设置的class a的值。

然后执行$c1->get_c();。这实例化了一个新的class a。这意味着静态属性$b被赋予一个新值,因为在每个实例化时都会调用function __construct()

因此,当第二次执行$c1->get_bb();时,$b的值已发生变化。