我的课程:
<?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)
答案 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
的值已发生变化。