PHP:访问外部静态变量

时间:2017-10-03 21:51:36

标签: php

A的成员具有函数:

class A {
    public function foo() {
        static $x=2;
        function bar() {
            echo "x=$x";
        }
        bar();
    }
}
$a = new A();
$a->foo();

这会在行echo "x=$x";中出现错误。

如何从功能$x中的班级成员foo()访问bar()

我使用的是PHP 5.5.9。

2 个答案:

答案 0 :(得分:2)

不要尝试在函数中声明静态变量。

class A {
    protected static $x = 2;

    public function foo() {
        function bar() {
            echo "x=" . self::$x;
        }

        bar();
    }
}

$a = new A();
$a->foo();

答案 1 :(得分:0)

最后找到了一个解决方案,基于@ishegg的封闭理念:

class A {
    public function foo() {
        static $x=2;
        $bar = function () use (&$x,&$bar) {
            echo "x=$x\n";
            if (++$x<6) $bar();
        };
        $bar();
    }
}
$a = new A();
$a->foo();

这种递归是可能的,因为闭包作为参考传递给它自己。由于引用只是一个指针,因此可以在完全定义函数之前对其进行求值。所以解决方案有效地依赖于通过引用传递的闭包。

请注意,$x也已作为参考&$x传递,否则我们只会获得$x的副本,而静态变量$x永远不会更改。

像魅力一样运行:https://3v4l.org/U293s

结果:

x=2 
x=3 
x=4 
x=5