<?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();
}
}
//单例模式
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();
}
}