哪个更快 - 布尔变量检查或is_null()?

Hec*_*ksa 3 php performance

假设我正在创建一个会话类,相关实现如下:

public class Session()
{
    private $id;
    private $user;
}
Run Code Online (Sandbox Code Playgroud)

$user如果会话已登录,则该字段包含User类型的对象,如果会话未登录到站点,则该字段为null.这$id是会话ID.

假设我现在想知道用户是否已登录.显然我可以检查$ user是否为null,如果是,那么用户没有登录 - 如下所示:

public class Session()
{
    private $id;
    private $user;

    public function isLoggedIn()
    {
        return !is_null($user);
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,我可以存储一个布尔会话变量,$loggedIn或者其他东西,在登录时设置为false,否则在构造函数中初始化为false,而不是测试:

public class Session()
{
    private $id;
    private $user;
    private $loggedIn;

    public function isLoggedIn()
    {
        return $loggedIn;
    }
}
Run Code Online (Sandbox Code Playgroud)

一种方法会产生比另一种方法更好的性能吗?如果是这样,哪个,为什么?或者,出于与性能无关的任何原因,一种方法是否优于另一种方法?

kha*_*ael 10

php.net在这个用户贡献的帖子(链接到帖子)检查基准,我们看到==并且===比它快得多is_null.


Ale*_*sky 6

越简单越好.如果您引入一个新变量来跟踪$ user是否为null,那么您还会引入is_null($ user)和$ loggedIn不匹配的可能性.避免担心这一点的麻烦比任何可能的性能微观优化都要值得多.