<code><?php require_once("DB.php"); class DatabaseConnection { public static function get() { static $db = null; if ( $db == null ) echo '1111'; $db = new DatabaseConnection(); return $db; } private function __construct() { } } var_dump(DatabaseConnection::get()); var_dump(DatabaseConnection::get()); ?> 为什么 结果只输出一次1111 上面的static $db = null这里不是每执行一次get()就重新对$db付值为null了吗,求解下</code>
<code><?php require_once("DB.php"); class DatabaseConnection { public static function get() { static $db = null; if ( $db == null ) echo '1111'; $db = new DatabaseConnection(); return $db; } private function __construct() { } } var_dump(DatabaseConnection::get()); var_dump(DatabaseConnection::get()); ?> 为什么 结果只输出一次1111 上面的static $db = null这里不是每执行一次get()就重新对$db付值为null了吗,求解下</code>
因為參數是static,你在末尾對$db = new DatabaseConnection();你第二次進來的時候其實$db在第一次發生變化,所以不是null.
不信你吧static換成public,應該就會出現兩次
第二次的$db沒有重新賦值,只有第一次進去被初始化了,參考下文檔連結描述
static
變數的作用域和局部變數一樣,生命週期和全域變數一樣。