繁体   English   中英

PHP,OOP,静态

[英]PHP, OOP, Static

我对PHP.net上有关static关键字的某些句子的理解有些疑问,在此链接上 ,PHP.net有一个问题,我向他们解释了static关键字,但我听懂了他们说的所有内容,但我没有成功地得到一个句子,“像其他任何PHP静态变量一样。 如果有人可以帮我提供代码示例,我只是没听懂,mabye的解释会很棒。

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

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

基本上,您可以这样做:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM