PHP - 从各种子节点调用时在父方法中声明的静态变量的行为

时间:2018-02-01 04:35:20

标签: php variables inheritance methods static

说我上课了......

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'的输出,而不实现类属性。

2 个答案:

答案 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);
    }
}