您的位置:首页 > 编程语言 > PHP开发

PHP 实现单件(singleton)模式

2010-08-06 01:29 537 查看
    单例模式(singleton)也叫单件模式。使用它的目的是为了确保某个类只有一个实例。

    因为它的实现方式很简单,所以多数模式书籍都把单例模式作 为入门模式来介绍,

    可以说对很多模式爱好者来说,单例模式是他们最熟悉的设计模式。比如,ZendFramework 前端控制器也是单例的。

    注意:

    1,正常的单例模式应该设置一个私有化的__construct,防止用户使用 new 进行实例化。

    2,再覆盖(override)一个空的 __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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息