PHP 单例 工厂 注册树

<?php


//单例模式
class SIte{
    //属性
public $sitename;
//本类的静态实例
protected static $instance = null;
//禁用构造器
private function __construct($sitename){
         $this->sitename = $sitename;
}


//获取本类唯一的实例
public static function getInstance($sitename="php中文网"){
        if(!self::$instance instanceof self){
            self::$instance = new self($sitename);
        }
        return self::$instance;
}
}


//用工厂模式生成本类的单一实例
class Factory{
    //创建指定类的实例了
public static function create(){
       return Site::getInstance('www.php.cn');
}
}


//注册树
/*
    注册:set()  对象挂在树上
    获取:get()  获取对象
    注销:_unset()  销毁对象
 
*/
class Register{
//创建对象池:数组
protected static $object = [];
    
    //生成对象并上树
    public static function set($alias,$object){
        self::$object[$alias] = $object;
    } 


    //从树上获取对象
    public static function get($alias){
        return self::$object[$alias];
    }


    //把书上的对象吃掉
    public static function _unset($alias){
         unset(slef::$object[$alias]);
    }


}




//将Site类的实例 放至对象树
Register::set('site',Factory::create());
//从树上获取一个对象
$obj = Resgister::get('site');


echo $obj->sitename;






/*
trait实现了代码的复用
突破单继承限制
trait不是用于实例话 
优先级问题:
当前类和父类中方法一样
trait类的优先级高于同名父类方法






*/


trait Demo1{
public function test(){
    return __METHOD__;
}
}




trait Demo2{
public function test1(){
    return __METHOD__;
}
}


class Demo{
use Demo1,Demo2;//相当于将Demo1和Demo2中的方法引进来
public function test2(){
   return __METHOD__;
}


public function test(){
   return $this->test1();
}


}





















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值