【发布时间】:2012-05-31 19:11:39
【问题描述】:
我对 PHP.net 上关于 static 关键字的一些句子有疑问, 在 Link, PHP.net 解释静态关键字时,我确实理解了他们所说的所有内容,但我没有成功地从“像任何其他 PHP 静态变量一样”开始的一句话。 我只是不明白,如果有人可以帮我提供代码示例,也许解释会很棒。
【问题讨论】:
-
谢谢你,我现在正在阅读。
我对 PHP.net 上关于 static 关键字的一些句子有疑问, 在 Link, PHP.net 解释静态关键字时,我确实理解了他们所说的所有内容,但我没有成功地从“像任何其他 PHP 静态变量一样”开始的一句话。 我只是不明白,如果有人可以帮我提供代码示例,也许解释会很棒。
【问题讨论】:
当说“像任何其他静态变量一样”时,手册指的是函数内部的静态变量。原型示例是保持内部计数器的函数:
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;
}
【讨论】:
$counter 初始化为例如0,我们不想每次都重置它。
基本上,您可以这样做:
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;
}
}
因为您不能通过指向另一个变量来初始化静态变量。
【讨论】: