单例模式:
单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。
所有的单例模式至少拥有以下三种公共元素:
1. 它们必须拥有一个构造函数,并且必须被标记为private
2. 它们拥有一个保存类的实例的静态成员变量
3. 它们拥有一个访问这个实例的公共的静态方法
代码:
<?php class ren { public $name; private static $dx;//存储对象 //声明一个私有的实例变量 private function __construct()//声明私有构造方法为了防止外部代码使用new来创建对象。 {} public static function duixiang() { if(empty(self::$dx))//self关键字调用静态类;静态方法不需要实例化直接调用类->方法 {//声明一个dx()静态方法,用于检测是否有实例对象 self::$dx = new ren(); } return self::$dx; } } //$shili=new ren();//报错 //$shishi=new ren(); //两者不同 $r= ren::duixiang(); $r->name = "xxx"; var_dump($r); $r1 = ren::duixiang(); var_dump($r1); ?>
工厂模式:
工厂模式就是一种类,具有为您创建对象的某些方法,这样就可以使用工厂类创建对象,而不直接使用new。这样如果想更改创建的对象类型,只需更改该工厂即可。
看代码:
这是一个普通的类,里面有一些方法
<?php class yun { public $a; public $b; function suan() { echo "运算"; } } class jia extends yun//继承yun { function suan()//重写 { return $this->a+$this->b; } } class jian extends yun { function suan() { return $this->a-$this->b; } } class cheng extends yun { function suan() { return $this->a*$this->b; } } ?>
然后写一个工厂类
<?php class gongchang { static function chanpin($name) //给一个参数,返回一个对象 { switch ($name){ case"+": //表达式的值与结构中每个 case 的值进行比较。如果存在匹配,则执行与 case 关联的代码 return new jia(); break; case"-": return new jian(); break; case"*": return new jia(); break; } } } $aa = gongchang::chanpin("+"); //此处找到与+相匹配的方法 //给一个“*”的参数,给我返回一个类 var_dump($aa); ?>