0

我在 PHP.net 上对 static 关键字的一些句子有疑问,在这个链接,PHP.net 解释 static 关键字我确实理解了他们所说的一切,但我没有成功得到一个从“开始”的句子像任何其他 PHP 静态变量一样”。如果有人可以帮助我提供代码示例,我只是不明白,也许解释会很棒。

4

2 回答 2

3

当说“像任何其他静态变量一样”时,手册指的是函数内的静态变量。原型示例是保留内部计数器的函数:

function foo() {
    static $counter = 0; // static variable
    return ++$counter;
}

像这样的静态变量和静态类属性都对您可以用来初始化它们的表达式有限制。

function foo() {
    static $counter = getInitialValue(); // ERROR: not possible!
    return ++$counter;
}

如果你需要做这样的事情,通常的解决方法是

function foo() {
    static $counter; // not initialized explicitly, same as = null
    if ($counter === null) { // three equals!
        $counter = getInitialValue();
    }
    return ++$counter;
}
于 2012-05-25T07:42:12.040 回答
1

基本上,你可以这样做:

class Foo
{
    public static $my_static = 'foo';

    public function staticValue() {
        return self::$my_static;
    }
}

where$my_static被初始化为一个值为 的字符串foo。但你不能这样做:

class Foo
{
    public static $my_static = substr('food',0,3);

    public function staticValue() {
        return self::$my_static;
    }
}

并期望$my_static包含函数调用的结果substr;直接将函数的返回值分配给静态变量是非法操作。同样,您不能这样做:

class Foo
{
    public static $my_static = 'foo';
    public static $my_static_2 = $my_static;

    public function staticValue() {
        return self::$my_static;
    }
}

因为您可能无法通过指向另一个变量来初始化静态变量。

于 2012-05-25T07:42:24.223 回答