最近,当我下载一个OpenSource项目时,我遇到了这个PHP代码:
<?php
namespace That\Thing;
final class Somewhere
{
//...
public static function somefunc( /*...*/ )
{
static $exists = null;
if ($exists === null) {
$exists = \function_exists('mb_substr');
}
if ($exists) {
//...
我的PHP没问题,所以阅读上面的内容,我很困惑static $exists = null
究竟是做什么的?将变量设置为Null对我来说没有意义,然后立即检查变量是否实际为空? (在这里添加Duhh)
这里是否有某种PHP版本检查?为什么有人会写这段代码?
我已经包含了周围的OOP,以防它有影响力。有人可以解释一下吗?
答案 0 :(得分:4)
static
在函数调用中保留变量值。但是,static
变量只能用常量值初始化。 不支持此(静态初始化程序中的函数调用):
static $exists = \function_exists('mb_substr');
因此,作为此变通方法,变量初始化为null
,如果值为null
(如果它是第一次访问变量,就在初始化之后),则将其设置为实际价值。
static
值在编译阶段初始化,在运行时之前。因此,不能调用运行时函数,或者此时可以进行其他过于复杂的运行时计算。 static $exists = null
在编译时发生;然后第一次调用该函数时,就完成了运行时计算。