+ -
当前位置:首页 → 问答吧 → PHP 实现单件(singleton)模式

PHP 实现单件(singleton)模式

时间:2010-07-21

来源:互联网

单例模式(singleton)也叫单件模式。使用它的目的是为了确保某个类只有一个实例。
    因为它的实现方式很简单,所以多数模式书籍都把单例模式作 为入门模式来介绍,
    可以说对很多模式爱好者来说,单例模式是他们最熟悉的设计模式。比如,ZendFramework 前端控制器也是单例的。
    注意:
    1,正常的单例模式应该设置一个私有化的__construct,防止用户使用 new 进行实例化。
    2,再覆盖一个 __clone() 方法以限制 __clone 的行为。
    <?php
      class MyClass
      {
        private static $instance = NULL;
        private $str;
        private $num;
        public function get_instance($s, $n)
        {
          if(!self::$instance instanceof self)
          {
            self::$instance = new self($s, $n);
            return self::$instance;
          }
          else
          {
            echo 'Error: more than one instance @Class: MyClass';
          }
        }
        private function __construct($s, $n)
        {
          echo 'this is __construct().';
          $this->str = $s;
          $this->num = $n;
        }
        public function method1()
        {
          echo 'this is method1().';
        }
        //覆盖__clone()方法,限制克隆
        private function __clone()
        {
        }
      }
      /*
      因为构造方法是 private(私有)的,所以是不能直接 new 实例化的,
      必须使用下面的方法:MyClass::get_instance();
      */
      $obj = MyClass::get_instance(1, 2);
      $obj->method1();
      //再次取得实例时,就会报错,实例化失败
      $obj = MyClass::get_instance();
      //$obj1 = new MyClass();
    ?>
    作者:张庆(网眼) 西安 PHP 教育培训中心 2010-7-20
    来自“网眼视界”:http://blog.why100000.com
    作者微博:http://t.qq.com/zhangking
    “十万个为什么”电脑学习网:http://www.why100000.com

作者: 西安PHPer   发布时间: 2010-07-21

这不是从手册上复制上来么。

作者: 温柔的大海   发布时间: 2010-07-21

回复 温柔的大海


   这是广告,没看出来么,而且是很没水平的广告

作者: 四不象   发布时间: 2010-07-21