- 博客(21)
- 收藏
- 关注
原创 PHP设计模式-外观模式
前面我介绍过适配器模式[附:PHP设计模式-适配器模式]。代理模式是通过组合或继承的方式包装一个类来改变它的接口,使得接口兼容。外观模式和适配器模式类似,它包装一组子类的复杂逻辑,使其对外只提供简单的接口。我们来看一个例子:如果我要开启一辆车,通常我要开车门,用钥匙打火(即开启发动机引擎),踩油门就能把车开起来。那么在这一系列的动作中,我们可能会涉及到很多的动作或方法。我们停车时,要刹车,关引
2013-08-08 23:31:03 646
原创 PHP扩展开发(2)-第一个扩展
上一节,我们生成了一个扩展的框架。这一节,开始基于这个框架,加一点代码写出我们的第一个扩展。那就按国际惯例,写个Hello, World!吧。在我们的test框架的目录下,我们先关注两个自动生成的重要的文件php_test.h,和test.c php_test.h 是一个头文件,用来定义常量,我们新加的一些方法等。 test.
2013-08-08 11:38:35 699
原创 PHP设计模式-模板模式(模板方法模式)
模板模式,也叫模板方法模式。它主要是利用继承的方法覆盖。在工厂模式系列中,我们就有讲到工厂方法模式利用的就是子类在继承父类时,将指定方法覆盖以实现不同子类的功能。我们来回顾一下,有一个生产玩具的工厂,他们都有生产玩具的能力,他们有三个车间生产不同的玩具,分别为熊玩具,狗玩具,猫玩具。每种玩具的生产方式和流程不一样。那么,如何设计?轻车熟路,首先我们有个玩具车间的抽象类,它指明各车间有生产玩具的能力
2013-08-06 21:46:33 739
原创 PHP设计模式-享元模式
从字面意义上看来,享元就是共享一些元素。它解决的是一个轻量级的创建或拷贝。什么意思呢? 例如:我有一个用企业用户管理的功能模块,用户有名字,和公司的一些基本信息, 公司的信息是需要根据用户的名字到数据库中查询的。class CompanyInfo{ //公司名称 protected $_name; //公司地址 protected $_addr; //
2013-08-06 17:49:15 733
原创 PHP设计模式-命令模式
古代的皇帝是最喜欢下达命令的人。如果皇帝每次下达命令时都要把大家叫到面前来,会很累的。于是让太监当跑腿的。那就是太监直接与接受命令的人打交道了。皇帝让给兵部命令让派兵,让御善房做点好吃的。那么就得有三个对象,一个兵部(Military),一个御善房(就叫厨房kitchen吧),一个太监.兵部能派兵,御善房能做好吃的,太监能传达命令。class Military { public funct
2013-08-05 22:59:27 680
原创 PHP扩展开发(1)-生成扩展框架
一、准备源代码从PHP官网上下载PHP的源代码。http://php.net/downloads.php 具体哪个版本,可以自行选择。下载完成后解压。二、创建一个扩展,并导入到PHP中PHP为扩展开发提供了一个扩展的生成工具:ext_skel首先我们要进入源代码的ext目录。我们可以看到ext目录中有一个ext_skel.执行如下命令:./ext_skel --ex
2013-08-02 18:39:20 680
原创 PHP设计模式-状态模式
最近,朋友一公司在开发一套OA系统。其中有一个设备管理的功能。设备采购后入库,然后分配,使用中可以维修,维修不成功就可以报废。这一系列的流程看似比较复杂。如果要用if和else来做各种操作的判断那会相当地复杂。于是,向开发人员推荐使用状态模式。首先,我们要理清楚。设备共有哪几种状态,哪几种操作? 操作有:入库,分配使用,维修,报废 状态有:待入库,已入库,待
2013-08-01 21:50:36 2085
原创 PHP设计模式-策略模式
什么事情是让程序员最苦恼的?就是需求不停地变。有时候一天要变好几次,要上线好几版程序。如果代码结构设计地不好,就会陷入无穷无尽的粪坑,不光改起来麻烦,而且容易有一堆的bug。我就亲身经历过这样痛苦的过程。自从使用了策略模式,应对各种策略的改变就游刃有余了。策略模式真有这么利害?至少,我觉得在应对指定的一些需求,策略的不断,策略模式的确能起到举足轻重的作用。 那么什么是策略模式呢?如何使用呢?这
2013-07-30 21:58:53 753
原创 PHP设计模式-代理模式
代理就是帮别人代干某事。例如,我每个月都要去银行交一次水费。interface Payable{ public function pay($amount);}class MyAccount implements Payable{ public function pay($amount) { echo "交水费"; }} 后来,同事告诉我,现在都不用到银行交消费了
2013-07-30 12:14:54 644
原创 PHP设计模式-装饰器模式
说到装饰器,最简单的合理的场景就像是,我们每个人都要穿衣服,可能会有各种各样的搭配,可能先穿内衣,再穿毛衣。也有可能直接穿件T恤。那如何做到呢?首先,得有个以下几个类:人,抽象的衣服和三个具体的衣服类.并且,这些衣服都有一个方法getName(),获取衣服类型的名称。class People{}abstract class Cloth{ abstract public func
2013-07-28 22:28:43 713 1
原创 PHP设计模式-数据访问对象模式
在PHP开发中,我们经常会与数据库打交道(本例中以mysql为例),尤其是一些数据库的增删改查操作,是经常要用到的。假定,我们有一个mysql数据库,有服务器名$host, 数据库用户名$user, 数据库密码$pass及数据库$test. 现在我们要连接test数据库,并执行一个建表语句,通常会这么//连接数据库$conn = mysql_connect($host,
2013-07-28 13:05:33 859
原创 PHP设计模式-建造者模式(构建者模式)
相信大家都听说过这么一个脑筋急转弯?把大象放进冰箱,要分几步?打开冰箱,把大象放进去,关上冰箱门。~~~哈哈。不错,就是宋丹丹小品里的一段。那么我们试着用程序实现一下?先建一个放大象的类,里面得有三个方法,开冰箱,放大象,关冰箱。很简单。class PushElephant{ public function openFridge() { echo "打开冰箱
2013-07-28 11:05:23 780
原创 PHP设计模式-适配器模式
有一家创业公司,需要做一个具有购物和论坛两种功能的网站。为了节省开发成本,决定用一套开源的购物网站和一套开源的论坛站进行修改上线。在进行两套系统的用户合并的过程中,开发人员有点犯难了。两套系统的用户表结构都不一样。用户操作类也不一样。例如,我要查询一个用户的详细信息。在不同的系统中,实现不一样,返回结果也不一样。如下:class Shop_User { //根据用户ID查询用户信息 pu
2013-07-27 16:27:56 803
原创 PHP设计模式-迭代器模式
在PHP中,我们经常会使用foreach来遍历数组中的元素。例如:$array = array( 'n1' => 'andrew', 'n2' => 'Delia', 'n3' => 'Qiqi', );foreach ($array as $key => $name) { echo "key=$key,name=$name".PHP_EOL; }
2013-07-23 21:02:39 775
原创 PHP设计模式-工厂系列(三)-抽象工厂模式
前两节我们总结了 简单工厂模式 [附:PHP设计模式-简单工厂模式] 和 工厂方法模式 [附:PHP设计模式-工厂方法] 模式。 从最开始工厂领导任命主管生产各种类型的玩具,到每种类型的产品工厂主任的任命来生产不同款式的玩具。这让工厂收益丰厚。领导为什么是领导就是因为他有想法,他觉得,为了把工厂做得更大一点。他决定,不能单纯地生产玩具。每种玩具应该有一种附属的产品。例如,给玩具生产衣服,让孩子们能
2013-07-23 15:09:21 855
原创 PHP设计模式-观察者模式(订阅者模式)
相信大家都用过QQ(没用过QQ的大叔不要扔我),而且大家都很讨厌QQ的小弹窗,不时地就会跳出一个小窗口,真心烦人。那么如果我们是腾讯消息推送的服务端开发人员。如果要用PHP来实现这种消息推送那么如果做到呢? 一。推送形式 首先,我们考虑地简单一点,毕竟我们只是学习设计模式嘛。首先,我们需要有一个用户类。可以展示推送的消息。其次,我们需要一个消息推送器的类
2013-07-22 22:24:25 1505
原创 PHP设计模式-工厂系列(二)-工厂方法模式
在简单工厂模式(静态方法工厂)中我们描述了,一个工厂的领导,让车间主管生产产品的实例。回顾一下:class DogToy { } class CatToy { } class BearToy { } class FactoryManager { //指定我们工厂可以生产的玩具类型 public
2013-07-22 17:53:37 1025 1
原创 PHP设计模式-工厂系列(一)-简单工厂模式(静态工厂模式)
在刚接触工厂模式的时候,总会把普通工厂,抽象工厂和工厂方法模式搞混。其实,没有必要特殊地去记忆去区分。只要搞明白各模式的原理和适用场景即可。为什么叫工厂呢?我们都知道,工厂是生产东西的地方。给这些设计模式取名工厂的意思也就是告诉大家,这三种模式其实就是为了创建对象。而且,这三者之中,以简单工厂最为简单(有点废话了)。 那么,什么是简单工厂呢?简单工厂就是,给定工厂一个参数,让工厂
2013-07-19 17:43:30 1078 1
原创 PHP设计模式-单例模式
在PHP的面向对象开发中,单例模式很常见。它主要用于,保证在一个进程中某对象的唯一性,并防止重复创建。举个例子,地球只有一个,那么我们在创建地球实例的时候,就不能重复创建。那么如何办到呢?这就要用到单例模式。 如何使用单例模式呢?既然,一个实例只能被创建一次,那么,我们必须保证每次拿到的实例都是同一个实例。那在类中,我们该如何保证呢?首先,我们都知道类中有一个静态对象,各实例都是
2013-07-19 15:31:37 822
原创 PHP的多进程模型-fork实现
在工作中,经常会用到将一大批数据分到多个进程中去处理的需求。于是自己写了一个简单的多进程类。方便以后使用,特在此总结一下:初始化一个多进程模型:$processes = new Processes($processNumber); $processNumber表示启动几个进程。用多进程模型来运行指定的方法:$processes->run($object, $method, $data,
2013-07-03 18:07:46 1550 1
原创 PHP魔法方法/函数详解
在php的语法中,有一些系统自带的方法名,均以双下划线开头,它会在特定的情况下被调用。即所谓的魔法函数。它们在面向对向编程中起着至关重要的作用。所以个人觉得很有必要整理一下。下面就php的15个魔法函数做一个详细整理:1. __construct() 和 __destruct()__construct() 对象初始化时会调用此方法(对于内核而言是指初始化完成后调用此方法).此方法用得比较多。__d
2013-07-03 16:41:22 11647 6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人