首頁  >  文章  >  後端開發  >  單例模式的一個問題,static $db = null為什麼只執行一次

單例模式的一個問題,static $db = null為什麼只執行一次

WBOY
WBOY原創
2016-09-08 08:43:551085瀏覽

<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變數的作用域和局部變數一樣,生命週期和全域變數一樣。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn