静态变量设置为null,然后使用if语句检查该变量是否为null

时间:2019-01-22 10:44:37

标签: php

我只想了解在if语句之前检查静态$ db变量是否为null的目的。然后它将始终为null。这是从抽象类获取PDO数据库连接的代码

static $db = null;

if($db === null)
{

    $host = 'localhost';
    $username = 'root';
    $password = '';
    $database = 'framework_test';

    try {
    $db = new PDO..

    }
    catch(PDOException $e)
    {
        echo "Connection failed: " . $e->getMessage();
    }       
} 
return $db;

3 个答案:

答案 0 :(得分:3)

我猜这段代码在一个函数中,该函数可能会被更频繁地调用?

http://php.net/manual/en/language.variables.scope.php#language.variables.scope.static

  

示例#5静态变量的使用示例

<?php
function test()
{
    static $a = 0;
    echo $a;
    $a++;
}
?>
  

$ a仅在函数的第一次调用中初始化,并且每次调用test()函数时,它将打印$ a的值并将其递增。

答案 1 :(得分:0)

这只会是null第一次。第二次$db将拥有一个PDO实例,并且不会初始化数据库连接再次。 static变量在函数调用期间保留其值,这就是static关键字的作用。

您不能直接编写static $db = new PDO(...)的原因是static变量只能使用常量值而不是new PDO这样的动态表达式直接初始化。

答案 2 :(得分:0)

实际上,这称为Singleton设计模式, 意味着您不希望创建一个类的对象。 在您的方案中,如果您第一次调用此函数,则$ db为null,然后如果condition为true,则建立数据库连接,并将此连接存储在$ db变量中,但是当您第二次调用该函数时,则$ db变量已经具有连接瞬时值,如果条件失败,则函数将返回$ db,而无需再次创建数据库的新对象。