博客列表 >2018-09-07常用模式+MVC

2018-09-07常用模式+MVC

阿小的博客
阿小的博客原创
2018年09月18日 23:19:13583浏览

实例

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

运行实例 »

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


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议