最近,当我下载一个开源项目时,我遇到了这个 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,然后立即检查变量是否实际上为 Null,对我来说没有意义? (在这里添加 Duhh)
这里是否正在进行某种 PHP 版本检查?为什么有人要写这段代码?
我已经包含了周围的OOP,以防它有影响。有人能解释一下吗?
最佳答案
static
在函数调用之间保留变量值。但是,静态变量只能用常量值进行初始化。 这不受支持(静态初始化程序中的函数调用):
static $exists = \function_exists('mb_substr');
因此,作为解决此问题的方法,变量被初始化为 null
,然后如果值为 null
(如果这是第一次访问该变量,则在初始化之后立即访问) ),它被设置为其实际值。
static
值在运行时之前的编译阶段初始化。因此,此时不能调用运行时函数或进行其他过于复杂的运行时计算。 static $exists = null
发生在编译时;然后第一次调用该函数时,将完成运行时计算。
关于php - 将静态变量设置为 null 后检查其是否为 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45016653/