首页  >  文章  >  后端开发  >  单例模式的一个问题,static $db = null为什么只执行一次

单例模式的一个问题,static $db = null为什么只执行一次

WBOY
WBOY原创
2016-09-08 08:43:551084浏览

<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