【发布时间】:2011-06-11 06:19:37
【问题描述】:
我正在测试静态关键字的确切工作原理,但我遇到了这个,我不明白发生了什么。
考虑使用以下代码的两个类ClassNameA 和ClassNameB。
没有静态关键字的ClassNameA
class ClassNameA
{
private $name;
public function __construct($value) {
if($value != '') {
$this->name = $value;
}
$this->getValue();
}
public function getValue() {
echo $this->name;
}
}
ClassNameB 带静态关键字
class ClassNameB
{
private static $name;
public function __construct($value) {
if($value != '') {
self::$name = $value;
}
$this->getValue();
}
public function getValue() {
echo self::$name;
}
}
当我使用 ClassNameA 多次实例化对象时
$a = new ClassNameA(12);
echo '<br/>';
$a = new ClassNameA(23);
echo '<br/>';
$a = new ClassNameA(''); //Argument given is Empty here
输出如下
12
23
现在当我使用 ClassNameB 多次实例化对象时
$a = new ClassNameB(12);
echo '<br/>';
$a = new ClassNameB(23);
echo '<br/>';
$a = new ClassNameB(''); //Argument given is Empty here
输出如下
12
23
23
请注意,即使通过的参数为空,它也会占用额外的值 23。这是一个错误吗?还是我错过了什么?
【问题讨论】: