php设计模式 工厂、单例、注册树模式
2016-02-29 10:59
615 查看
Source Code Pro字体 easyphp
命名空间:隔离类和函数,php5.3以后
类自动载入:php5.2以后
PSR-0规范:
命名空间必须与绝对路径一致
类名首字母必须大写
除入口文件外,其他“.php” 必须只有一个类。
开发符合PSR-0规范的基础框架
全部使用命名空间
所有PHP文件必须自动载入,不能有include/require
单一入口
spl标准库:
PHP链式操作:
魔术方法:
__get/__set:接管对象属性。在给不可访问属性赋值时,__set() 会被调用;读取不可访问属性的值时,__get() 会被调用。
__call/__callStatic:在对象中调用一个不可访问方法时,__call() 会被调用;用静态方式中调用一个不可访问方法时,__callStatic() 会被调用。
__toString:一个类转化成字符串
__invoke:以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。
object.php
index.php
1、三种基本设计模式
工厂模式:使用工厂方法或类生产对象,而不是在代码中直接new
Factory.php
index.php
单例模式:使某个类的对象仅允许创建一个
Database.php
index.php
注册模式:解决全局共享和交换对象,将对象注册到全局树上,可以在任何地方被直接访问
Register.php
index.php
命名空间:隔离类和函数,php5.3以后
//test5.php <?php namespace Test5;//命名空间必须是程序脚本的第一条语句,除了declare function test(){ echo __FILE__; }
//test6.php <?php namespace Test6; function test(){ echo __FILE__; }
<?php require 'test5.php'; require 'test6.php'; Test5\test(); Test6\test();
类自动载入:php5.2以后
spl_autoload_register('autoload1'); Test5::test(); Test6::test(); function autoload1($class){ require __DIR__.'/'.$class.'.php'; }
PSR-0规范:
命名空间必须与绝对路径一致
类名首字母必须大写
除入口文件外,其他“.php” 必须只有一个类。
开发符合PSR-0规范的基础框架
全部使用命名空间
所有PHP文件必须自动载入,不能有include/require
单一入口
spl标准库:
PHP链式操作:
<?php namespace Baobab; class Database{ function where($where){ return $this; } function order($order) { return $this; } function limit($limit){ return $this; } } ?> //index.php $db = new Baobab\Database(); $db->where('id = 1')->order('order by id')->limit(1);
魔术方法:
__get/__set:接管对象属性。在给不可访问属性赋值时,__set() 会被调用;读取不可访问属性的值时,__get() 会被调用。
__call/__callStatic:在对象中调用一个不可访问方法时,__call() 会被调用;用静态方式中调用一个不可访问方法时,__callStatic() 会被调用。
__toString:一个类转化成字符串
__invoke:以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。
object.php
<?php namespace Baobab; class Object{ protected $array = array(); function __set($key, $value){ $this->array[$key] = $value; } function __get($key){ //echo __METHOD__; return $this->array[$key]; } function __call($func, $param){ //var_dump($func,$param); return 'magic function'; } static function __callstatic($func, $param) { //var_dump($func, $param); return 'magic static function'; } function __toString(){ return __CLASS__; } function __invoke($param) { return var_dump($param); } }
index.php
$obj = new baobab\Object(); $obj->title = 'hello'; echo $obj->title; echo $obj->test1('hello', 123); echo $obj::test1('hello1', 1234); echo $obj; echo $obj('test1');
1、三种基本设计模式
工厂模式:使用工厂方法或类生产对象,而不是在代码中直接new
Factory.php
<?php namespace Baobab; class Factory{ static function createDatabase(){ $db = new Database(); return $db; } }
index.php
$db = Baobab\Factory::createDatabase(); $db1 = Baobab\Factory::createDatabase();
$db->limit($limit);
单例模式:使某个类的对象仅允许创建一个
Database.php
<?php namespace Baobab; class Database{ protected static $db; private function __construct(){ } static function getInstance(){ if (self::$db){ return self::$db; }else{ //self是指向类本身,也就是self是不指向任何已经实例化的对象(::域运算符号) self::$db = new self(); return self::$db; } }
index.php
$db = Baobab\Database::getInstance();
注册模式:解决全局共享和交换对象,将对象注册到全局树上,可以在任何地方被直接访问
Register.php
<?php namespace Baobab; class Register{ protected static $objects; static function set($alias, $object){ self::$objects[$alias] = $object; } static function _unset($alias) { unset(self::$objects[$alias]); } static function get($name) { return self::$objects[$name]; } }
//将db注册到注册树上 Register::set('db1', $db);
index.php
$db = Baobab\Register::get('db1');
相关文章推荐
- (3)WePHP控制器与模型
- (2)WePHP 控制器与使用模板
- php基础之转码
- (1)WePHP 开启WePHP
- lnrfvnhjttpvvlj
- 在PHP语言中使用JSON
- PHP开发中常见的漏洞及防范
- Thinkphp5.0中自动生成模块以及目录方案
- php 做下载功能需注意项
- 实例讲解PHP设计模式编程中的简单工厂模式
- Laravel入门基础教程(二)路由
- 实例讲解PHP设计模式编程中的简单工厂模式
- 查找php配置文件路径
- ftp 实现文件的上传下载以及列出文件列表
- php学习之路
- 如何让没有定义的php变量不报错
- ios afnetworking2.x上传图片 服务端php无法接受文件问题
- php小分点
- php执行流程相关
- 在内网建一个FTP服务器,并且可以通过外网访问