2016年12月24日

代理模式

摘要: 定义:在客户端与实体之间建立一个代理对象(proxy),客户端对实体进行操作全部委派给代理对象,隐藏实体的具体实现细节好处:代理对象(proxy)还可以与业务代码分离,部署到另外的服务器。业务代码中通过RPC来委派任务$proxy = new \IMooc\Proxy();$proxy->getUserName($id);$proxy->setUserName($id, $name);query(... 阅读全文

posted @ 2016-12-24 22:14 果然朝辉 阅读(112) 评论(0) 推荐(0) 编辑

面向对象编程的基本原则

摘要: 1.单一职责:一个类,只需要做好一件事情2.开发封闭:一个类,应该是可扩展的,而不可修改的3.依赖倒置:一个类,不应该强依赖另外一个类。每个类对于另外一个类都是可替换的。4.配置化:尽可能地使用配置,而不是硬编码。5.面向接口编程:只需要关心接口,不需要关心实现。来自为知笔记(Wiz) 阅读全文

posted @ 2016-12-24 22:14 果然朝辉 阅读(93) 评论(0) 推荐(0) 编辑

MVC结构

摘要: MVC结构是其它三个经典的设计模式的演变:观察者模式(Observer)(Pub/Sub), 策略模式(Strategy)和组合模式(Composite)。 来自为知笔记(Wiz) 阅读全文

posted @ 2016-12-24 22:14 果然朝辉 阅读(131) 评论(0) 推荐(0) 编辑

配置与设计模式

摘要: 1.PHP中使用ArrayAccess实现配置文件的加载$config = new \IMooc\Config(__DIR__.'/configs');var_dump($config['controller']);path = $path; } public function offsetExists($key) { return isset($this->con... 阅读全文

posted @ 2016-12-24 22:14 果然朝辉 阅读(474) 评论(0) 推荐(0) 编辑

原型模式

摘要: 定义:先创建好一个原型对象,然后通过clone原型对象来创建新的对象。好处:1.原型模式与工厂模式作用类似,都是用来创建对象 2.免去了类创建时重复的初始化操作 3.原型模式适用于大对象的创建。创建一个大对象需要很大的开销,如果每次new就会消耗很大,原型模式仅需内存拷贝即可。$prototype = new \IMooc\Canvas();$prototy... 阅读全文

posted @ 2016-12-24 22:13 果然朝辉 阅读(145) 评论(0) 推荐(0) 编辑

装饰器模式

摘要: 定义:可以动态地添加修改类的功能解析:一个类提供了一项功能,如果要在修改并添加额外的功能,传统的编程模式,需要写一个子类继承它,并重新实现类的方法。使用装饰器模式,仅需在运行时添加一个装饰器对象即可实现,可以实现最大的灵活性。$canvas1 = new IMooc\Canvas();$canvas1->init();$canvas1->addDecorator(new \IMooc\ColorD... 阅读全文

posted @ 2016-12-24 22:13 果然朝辉 阅读(117) 评论(0) 推荐(0) 编辑

迭代器模式

摘要: 定义:在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素好处:相比于传统的编程模式,迭代器模式可以隐藏遍历元素的所需的操作$users = new \IMooc\AllUser();foreach ($users as $user){ var_dump($user);}connect('127.0.0.1', 'root', 'root','test'); $result... 阅读全文

posted @ 2016-12-24 22:13 果然朝辉 阅读(126) 评论(0) 推荐(0) 编辑

注册模式

摘要: 定义:全局共享和交换对象好处:把某些类或者方法注册成全局变量(只需构造一次),调用时直接调用该全局变量即可$db = \IMooc\Register::get('db1');<?phpnamespace IMooc;class Factory{ static function createDatabase() { $db = Database::getInstance()... 阅读全文

posted @ 2016-12-24 22:12 果然朝辉 阅读(167) 评论(0) 推荐(0) 编辑

适配模式

摘要: 定义:可以将截然不同的函数接口封装成统一的API实际应用举例:1.PHP的数据库有mysql,mysqli,pdo3种,可以用适配器模式统一成一致 2.cache适配器,将memcache,redis,file,apc等不同的缓存函数,统一成一致以实际应用举例1作为示例$db = new IMooc\Database\MySQL();//$db = n... 阅读全文

posted @ 2016-12-24 22:12 果然朝辉 阅读(157) 评论(0) 推荐(0) 编辑

策略模式

摘要: 定义:将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,使用策略模式可以实现Ioc,依赖倒置、控制反转实际应用举例:假如一个电商网站系统,针对男性女性的用户要各自跳转到不同商品类目,并且所有广告位展示不同的广告(分支逻辑)class Page{ protected $strategy; function index() { echo "AD:"; ... 阅读全文

posted @ 2016-12-24 22:12 果然朝辉 阅读(106) 评论(0) 推荐(0) 编辑

数据对象映射模式

摘要: 定义:将对象和数据存储映射起来,对一个对象的操作会映射为数据存储的操作综合应用实例:在代码中实现数据对象映射模式,我们将实现一个ORM类,将复杂的SQL语句映射成对象属性的操作,结合使用数据对象映射模式,工程模式,注册模式$page = new Page();$page->index();class Page{ function index() { $user = \IM... 阅读全文

posted @ 2016-12-24 22:12 果然朝辉 阅读(161) 评论(0) 推荐(0) 编辑

观察者模式

摘要: 定义:当一个对象状态发生改变时,依赖它的对象全部会收到通知,并自动更新,实现低耦合,非侵入式的通知与更新机制场景:一个事件发生后,要执行一连串更新操作。传统的编程方式,就是在事件的代码之后直接加入处理逻辑。当更新的逻辑增加之后,代码会变得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件主体的代码$event = new Event();$event->addObserver(new ... 阅读全文

posted @ 2016-12-24 22:12 果然朝辉 阅读(137) 评论(0) 推荐(0) 编辑

php链式操作的实现

摘要: 在每个函数实现业务逻辑后,使用return $this;where("id=1")->where("name=2")->order("id desc")->limit(10);//$db->where("id=1");//$db->where("name=2");//$db->order("id desc");//$db->limit(10);来自为知笔记(Wiz) 阅读全文

posted @ 2016-12-24 22:11 果然朝辉 阅读(104) 评论(0) 推荐(0) 编辑

PHP魔法方法的使用

摘要: 1.__get / __set当类没有要存取的属性时,就调用这两个函数$obj = new IMooc\Object();$obj->title = "hello";echo $obj->title;array[$key] = $value; } function __get($key) { var_dump(__METHOD__); return $... 阅读全文

posted @ 2016-12-24 22:11 果然朝辉 阅读(308) 评论(0) 推荐(0) 编辑

工厂模式

摘要: 定义:用工厂的方法或类生成对象,而不是在代码中直接new好处:当对象的名称或对象的参数改变时,只需在工厂的方法或者类一处修改即可$db = IMooc\Factory::createDatabase();<?phpnamespace IMooc;class Factory{ static function createDatabase() { $db = new Data... 阅读全文

posted @ 2016-12-24 22:11 果然朝辉 阅读(81) 评论(0) 推荐(0) 编辑

单例模式

摘要: 定义:使某个类的对象仅允许创建一个实例好处:节约资源$db = IMooc\Database::getInstance();<?phpnamespace IMooc;class Database{ protected $db; private function __construct() { } static function getInstance() { ... 阅读全文

posted @ 2016-12-24 22:11 果然朝辉 阅读(102) 评论(0) 推荐(0) 编辑

命名空间与Autoload

摘要: 命名空间是为了防止函数名冲突当php编译器找到未定义类时,就会自动去调用__autoload($class)这个函数,$class就代表这个未定义的类名相对于当前项目根目录所在路径 php5.3之后使用spl_autoload_register()代替__autoload() 来自为知笔记(Wiz) 阅读全文

posted @ 2016-12-24 22:10 果然朝辉 阅读(194) 评论(0) 推荐(0) 编辑

SPL标准库-数据结构

摘要: 数据结构:栈$stack = new SplStack();$stack->push("data1\n");$stack->push("data2\n");echo $stack->pop();echo $stack->pop();数据结构:队列$queue = new SplQueue();$queue->enqueue("data1\n");$queue->enqueue("data2\n")... 阅读全文

posted @ 2016-12-24 22:10 果然朝辉 阅读(199) 评论(0) 推荐(0) 编辑

类型

摘要: PHP 支持 8 种原始数据类型。 标量类型:boolean(布尔型)当转换为 boolean 时,以下值被认为是 FALSE: ◦ 布尔值 FALSE 本身 ◦ 整型值 0(零) ◦ 浮点型值 0.0(零) ◦ 空字符串,以及字符串 "0" ◦ 不包括任何元素的数组 ◦ 不包括任何成员变量的对象(仅 PHP 4.0 适用) ◦ 特殊类型 NULL(包括尚未赋值的变量) ◦... 阅读全文

posted @ 2016-12-24 22:09 果然朝辉 阅读(196) 评论(0) 推荐(0) 编辑

变量

摘要: 静态变量 如果在声明中用表达式的结果对静态变量赋值会导致解析错误。全局和静态变量的引用 在一个函数域内部用 global 语句导入的一个真正的全局变量实际上是建立了一个到全局变量的引用。 引用并不是静态地存储的HTML 表单(GET 和 POST) 变量名中的点和空格被转换成下划线。例如 变成了$_REQUEST["a_b"]。 HTTP Coo... 阅读全文

posted @ 2016-12-24 22:06 果然朝辉 阅读(153) 评论(0) 推荐(0) 编辑

导航