现在的位置: 首页 > 编程语言 > 正文

PHP中的单例模式是什么?有什么用处

2020年02月20日 编程语言 ⁄ 共 1738字 ⁄ 字号 评论关闭

  单例模式

  定义:简单的说,整个应用一次访问流程中只有一个实例对象的设计模式。

  我对单例模式的理解就是可以减少new的操作,因为new操作的时候会消耗内存,如果进行大量的new操作,就会消耗大量的内存。

  例如:

  class abc {

  }

  $a = new abc;

  $b = new abc;

  $c = new abc;

  $d = new abc;

  echo "内存初始: ".memory_get_usage()."B\n";

  echo '< pre>';

  var_dump($a);

  echo '< /pre>';

  echo "内存使用: ".memory_get_usage()."B\n";

  echo '< pre>';var_dump($b);

  echo '< /pre>';

  echo "内存使用: ".memory_get_usage()."B\n";

  echo '< pre>';var_dump($c);

  echo '< /pre>';

  echo "内存使用: ".memory_get_usage()."B\n";

  echo '< pre>';var_dump($d);

  echo '< /pre>';

  echo "内存使用: ".memory_get_usage()."B\n";

  echo "峰值: ".memory_get_peak_usage()."B\n"

  输出结果:

  内存初始:126352B

  object(abc)#1 (0){

  }

  内存使用:126392B

  object(abc)#2 (0){

  }

  内存使用:126440B

  object(abc)#3 (0){

  }

  内存使用:126488B

  object(abc)#4 (0){

  }

  内存使用:126536B 峰值:127040B

  这里每一次new 操作就会增加内存的占用。而使用单例模式则不会造成这种情况。

  单例模式的要点

  1.某个类只能有一个实例。

  2.必须自行创建这个实例。

  3.必须自行向整个系统提供这个实例。

  下面是创建一个单例类的示例:

  /** * @purpose: 创建一个单例类 * Class Single */

  class Single {

  /** * @var Object 保存类实例的静态成员变量 */

  private static $_instance;

  /** * Single constructor. 私有的构造方法 */

  private function __construct(){

  echo 'This is a Constructed method;'; }

  /** * @purpose: 创建私有__clone方法防止对象被复制克隆 */

  private function __clone(){ }

  /** * @return Single|Object 单例方法,用于访问实例的公共的静态方法 */

  public static function getInstance(){

  if(!(self::$_instance instanceof self)){

  self::$_instance = new self; }

  return self::$_instance; }

  }

  现在我们进行实例化输出:

  This is a Constructed method;

  内存初始:129456B

  object(abc)#1 (0){

  }

  内存初始:129504B

  object(abc)#1 (0){

  }

  内存初始:129504B

  object(abc)#1 (0){

  }

  内存初始:129504B

  object(abc)#1 (0){

  }

  内存初始:129504B

  这里可以看出就算多次实例化内存也没有进行增长;

  单例模式的用处

  1.单例模式可以应用在数据库的操作类上。

  2.单例模式可应用在网站的计数器上。

  3.应用程序的日志应用,一般都使用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。

  4.Web应用的配置对象的读取,一般也应用单例模式,这个是由于配置文件是共享的资源。

  以上就是有关单例模式的详细介绍了,希望以上内容可以帮到你。

抱歉!评论已关闭.