将静态变量设置为null后,检查静态变量是否为空

时间:2017-07-10 15:57:53

标签: php oop variables scope null

最近,当我下载一个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,以防它有影响力。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:4)

static在函数调用中保留变量值。但是,static变量只能用常量值初始化。 不支持此(静态初始化程序中的函数调用):

static $exists = \function_exists('mb_substr');

因此,作为此变通方法,变量初始化为null,如果值为null(如果它是第一次访问变量,就在初始化之后),则将其设置为实际价值。

static值在编译阶段初始化,在运行时之前。因此,不能调用运行时函数,或者此时可以进行其他过于复杂的运行时计算。 static $exists = null在编译时发生;然后第一次调用该函数时,就完成了运行时计算。