我只想了解在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;
答案 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,而无需再次创建数据库的新对象。