php设计模式之单例模式

在同事交流中使用设计模式描述程序思想,效率要快的多.

初学者可以把设计模式理解成一种专业术语, 就是为了沟通开发交流无障碍的,

所以设计模式是必学的

github 代码地址: https://github.com/baisecaihong/GOF

单例模式:

生成原因:1全局变量是无法复用的,如果A程序的全局变量没有增加到B程序中,那么你就无法在B中执行代码

              2全局变量将类捆绑与特定的环境,破坏了封装

作用:用单例模式改进全局变量,因为无法用错误类型的数据覆写一个单例


<?php
//单例模式
class danli{

   private $value = array();

   private static $instance;

   public static function getInstance()
   {
       if(!(self::$instance)){
           self::$instance = new danli();
       }
       return self::$instance;
   }

   private function __construct()
   {

   }

   public function __clone()
   {
       // TODO: Implement __clone() method.
   }

   public function __wakeup()
   {
       // TODO: Implement __wakeup() method.
   }

   public function setValue($key,$val){
       $this->value[$key] = $val;
   }

   public function getValue($key){
       return $this->value[$key];
   }
}

$danli = danli::getInstance();
$danli->setValue('name','白色彩虹');
unset($danli);
var_dump($danli);
$danli2 = danli::getInstance();
print $danli2->getValue('name');


解释下代码 

创建danli类

声明私有化变量$value数据类型为array,这一步就阻止了设置value为其他类型的覆写

声明私有化静态变量$instance    静态变量只存在于函数作用域内,静态变量只存活在栈中,下次再调用这个函数的时候,该变量的值会保留下来 而且私有化只能类内部访问

声明公共静态方法getInstance

如果$instance为空就重新实例化自己创建一个danli类实例并且返回实例

私有化初始化方法

私有化克隆

私有化wakeup

这些是用来保持数据一致性,防止被克隆之后操作混乱

共有的设置value 和提取value


使用:$danli引用danli类中的getInstance;

设置value值

删除引用

这个时候打印下$danli返回Undefined variable: danli

说明已经删除了,但是之前设置的value的值还在

所以$danli2再引用一次,

打印值 可以打印出来

$instance是不能被类外部访问的只能通过getInstance进行访问,又因为getInstance方法是public且static的所以脚本的任何地方都可以调用 这就形成了单例模式,

博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论