说我上课了......
class Parent {
protected function foo() {
static $x = 0;
$x++;
return $x;
}
}
......以及这两个子类:
class ChildOne extends Parent {
public function bar() {
echo $this->foo();
}
}
class ChildTwo extends Parent {
public function bar() {
echo $this->foo();
}
}
即使只声明了一个静态变量,ChildOne和ChildTwo都保留了自己的$ x记录,所以以下......
...
$childOne.bar();
$childTwo.bar();
...正在产生输出'11'而不是'12'。
问题:在调用父方法时,是否可以确保所有子类都使用相同的静态变量?在上面的示例中,解决方案将生成'12'的输出,而不实现类属性。
答案 0 :(得分:0)
没有回答让我相信这根本不可能。为了将来参考其他人,这是我实施的内容:
class Parent {
static $x = 0;
protected function getX() {
self::$x++;
return self::$x;
}
}
class ChildOne extends Parent {
public function bar() {
echo $this->getX();
}
}
class ChildTwo extends Parent {
public function bar() {
echo $this->getX();
}
}
...
$childOne.bar();
$childTwo.bar();
根据需要输出为'12',但必须实现静态类属性。
答案 1 :(得分:0)
尝试引用父项。说getX()返回一个字符串
class ChildTwo extends Parent {
public function bar() {
$tempOfX $parent->getX();
echo($tempOfX);
}
}