<?php /* * 单例模式:一个类仅允许被实例化一次 应用场景: 1.一个站点仅允许连接一次数据库 2.一个网站只需要一个配置类 */ //创建一个配置类 class Config { //创建当前配置实例 private static $instance = null; //设置配置容器 public $setting = []; //将构造函数私有化,禁止从类的外部实例化对象 private function __construct() { } //克隆方法私有化,防止外部调用 private function __clone() { } //外部仅允许通过一个公共方法来创建类, //使用静态方法,因为构造函数已经私有化,不能在外部直接创建对象,静态方法是属于类的,被类所共享 public static function getInstance() { //检测当前类的实例对象$instance是否已经保存了当前类的实例 if(self::$instance == null){ //如果没有,初始化自己 self::$instance = new self(); } //如果已经存在返回当前类的实例 return self::$instance; } //设置参数 public function set() { //获取参数个数 $num = func_num_args(); //单参数个数不为0时,进行设置操作 if($num > 0){ switch($num){ case 1: //参数为1时,说明传进来的是数组 $value = func_get_arg(0); //获取当前穿过来的第一个参数 //判断传过来的值是否是数组,提高代码准确性 if(is_array($value)){ $this->setting = array_merge($this->setting,$value); //array_merge合并数组 } break; case 2: //参数为2 时,说明传进来的参数为键和值,逐个设置 $name = func_get_arg(0); //获取第一个参数为配置项的名称 $value = func_get_arg(1); //获取第一个参数为配置项的值 $this->setting[$name] = $value; break; default: echo '<span style="color:red">参数设置有误</span>'; break; } }else{ echo '<span style="color:red">无参数</span>'; } } //参数获取 //约定:默认去参数时,获取所有参数 public function get($name='') { //无参数时获取所有参数 if(empty($name)){ return $this->setting; } //获取某一个参数 return $this->setting[$name]; } } $config1 = Config::getInstance(); $config2 = Config::getInstance(); var_dump($config1,$config2); var_dump($config1===$config2); //判断$config1,$config2是否为同一对象 echo '<hr>'; $config1->set(); echo '<hr>'; //逐个进行设置 $config1->set('host','127.0.0.1'); echo $config1->get('host'); echo '<hr>'; //用参数进行设置 $constr = ['host'=>'localhost','user'=>'root','password'=>'123456']; $config1->set($constr); print_r($config1->get());
点击 "运行实例" 按钮查看在线实例
<?php //工厂模式 :不用new,用函数批量创建对象 //声明一个形状类 class Shape { //声明一个静态创建方法 $type形状,$size大小 public static function create($type,array $size = []) { switch(strtolower($type)) { //长方形 case 'rectangle': return new Rectangle($size[0],$size[1]); break; //圆形 case 'circle': return new Circle($size[0]); break; } } } //声明一个长方形类 class Rectangle { private $width; private $height; public function __construct($width,$height) { $this->width = $width; $this->height = $height; } public function area() { return '长方形的面积是:'.$this->width*$this->height; } } //声明一个圆类 class Circle { const PI = 3.14; //定义一个常量 private $radius; public function __construct($radius) { $this->radius = $radius; } public function area() { return '圆形的面积是:'.self::PI*$this->radius*$this->radius; } } //创建一个长方形对象 $rectangle = Shape::create('rectangle',[30,40]); echo $rectangle->area().'<hr>'; //创建一个圆形对象 $circle = Shape::create('circle',[10]); echo $circle->area().'<hr>';
点击 "运行实例" 按钮查看在线实例