【问题标题】:PHP, OOP, StaticPHP, OOP, 静态
【发布时间】:2012-05-31 19:11:39
【问题描述】:

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

【问题讨论】:

  • 谢谢你,我现在正在阅读。

标签: php oop static


【解决方案1】:

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

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;
}

【讨论】:

  • 感谢您的回答,如果您能解释一下如果您使用两个等于会发生什么情况,我理解它,我知道二到三之间的差异,但您能解释一下这种情况下的差异吗?
  • @Blanktext:在这种情况下没有什么特别的区别。我只是在避免将$counter 初始化为例如0,我们不想每次都重置它。
  • 非常感谢乔恩,我现在明白了,祝你有美好的一天。
【解决方案2】:

基本上,您可以这样做:

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

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

其中$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;
    }
}

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

【讨论】:

    猜你喜欢
    • 2011-05-09
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 2016-12-20
    相关资源
    最近更新 更多