Blogger Information
Blog 28
fans 0
comment 0
visits 15805
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
2018-09-07常用模式+MVC
阿小的博客
Original
586 people have browsed it

实例

<?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>';

运行实例 »

点击 "运行实例" 按钮查看在线实例


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post