PHP
文章平均质量分 78
goqihoo
这个作者很懒,什么都没留下…
展开
-
PHP魔法方法/函数详解
在php的语法中,有一些系统自带的方法名,均以双下划线开头,它会在特定的情况下被调用。即所谓的魔法函数。它们在面向对向编程中起着至关重要的作用。所以个人觉得很有必要整理一下。下面就php的15个魔法函数做一个详细整理:1. __construct() 和 __destruct()__construct() 对象初始化时会调用此方法(对于内核而言是指初始化完成后调用此方法).此方法用原创 2014-02-02 15:20:04 · 925 阅读 · 0 评论 -
PHP设计模式-数据访问对象模式
在PHP开发中,我们经常会与数据库打交道(本例中以mysql为例),尤其是一些数据库的增删改查操作,是经常要用到的。假定,我们有一个mysql数据库,有服务器名$host, 数据库用户名$user, 数据库密码$pass及数据库$test. 现在我们要连接test数据库,并执行一个建表语句,通常会这么//连接数据库$conn = mysql_connect($host,原创 2014-02-02 16:01:14 · 862 阅读 · 0 评论 -
PHP设计模式-装饰器模式
说到装饰器,最简单的合理的场景就像是,我们每个人都要穿衣服,可能会有各种各样的搭配,可能先穿内衣,再穿毛衣。也有可能直接穿件T恤。那如何做到呢?首先,得有个以下几个类:人,抽象的衣服和三个具体的衣服类.并且,这些衣服都有一个方法getName(),获取衣服类型的名称。class People{}abstract class Cloth{ abstract public func原创 2014-02-02 16:05:25 · 110 阅读 · 0 评论 -
PHP设计模式-状态模式
最近,朋友一公司在开发一套OA系统。其中有一个设备管理的功能。设备采购后入库,然后分配,使用中可以维修,维修不成功就可以报废。这一系列的流程看似比较复杂。如果要用if和else来做各种操作的判断那会相当地复杂。于是,向开发人员推荐使用状态模式。首先,我们要理清楚。设备共有哪几种状态,哪几种操作? 操作有:入库,分配使用,维修,报废 状态有:待入库,已入库,待分配原创 2014-02-02 16:13:28 · 130 阅读 · 0 评论 -
PHP设计模式-命令模式
古代的皇帝是最喜欢下达命令的人。如果皇帝每次下达命令时都要把大家叫到面前来,会很累的。于是让太监当跑腿的。那就是太监直接与接受命令的人打交道了。皇帝让给兵部命令让派兵,让御善房做点好吃的。那么就得有三个对象,一个兵部(Military),一个御善房(就叫厨房kitchen吧),一个太监.兵部能派兵,御善房能做好吃的,太监能传达命令。class Military { public funct原创 2014-02-02 16:16:30 · 88 阅读 · 0 评论 -
PHP设计模式-享元模式
从字面意义上看来,享元就是共享一些元素。它解决的是一个轻量级的创建或拷贝。什么意思呢? 例如:我有一个用企业用户管理的功能模块,用户有名字,和公司的一些基本信息, 公司的信息是需要根据用户的名字到数据库中查询的。class CompanyInfo{ //公司名称 protected $_name; //公司地址 protected $_addr;原创 2014-02-02 16:20:23 · 139 阅读 · 0 评论 -
PHP设计模式-外观模式
前面我介绍过适配器模式。代理模式是通过组合或继承的方式包装一个类来改变它的接口,使得接口兼容。外观模式和适配器模式类似,它包装一组子类的复杂逻辑,使其对外只提供简单的接口。我们来看一个例子: 如果我要开启一辆车,通常我要开车门,用钥匙打火(即开启发动机引擎),踩油门就能把车开起来。那么在这一系列的动作中,我们可能会涉及到很多的动作或方法。我们停车时,要刹车,关引擎,关车门。也原创 2014-02-02 16:27:00 · 1055 阅读 · 0 评论 -
PHP设计模式-单例模式
在PHP的面向对象开发中,单例模式很常见。它主要用于,保证在一个进程中某对象的唯一性,并防止重复创建。举个例子,地球只有一个,那么我们在创建地球实例的时候,就不能重复创建。那么如何办到呢?这就要用到单例模式。 如何使用单例模式呢?既然,一个实例只能被创建一次,那么,我们必须保证每次拿到的实例都是同一个实例。那在类中,我们该如何保证呢?首先,我们都知道类中有一个静态对象,各实例都是原创 2014-02-02 16:30:02 · 159 阅读 · 0 评论 -
PHP内核分析-Zend引擎-栈结构及操作
Zend引擎对栈常量的定义:#define ZEND_STACK_APPLY_TOPDOWN 1 //由顶部向底部对栈进行遍历操作#define ZEND_STACK_APPLY_BOTTOMUP 2 //由底部向顶部对栈进行遍历操作#define STACK_BLOCK_SIZE 64看一下Zend引擎栈的数据结构定义:typedef struct _zend_stac原创 2014-02-11 16:27:22 · 715 阅读 · 0 评论 -
PHP设计模式-工厂系列(三)-抽象工厂模式
前两节我们总结了 简单工厂模式和 工厂方法模式。 从最开始工厂领导任命主管生产各种类型的玩具,到每种类型的产品工厂主任的任命来生产不同款式的玩具。这让工厂收益丰厚。领导为什么是领导就是因为他有想法,他觉得,为了把工厂做得更大一点。他决定,不能单纯地生产玩具。每种玩具应该有一种附属的产品。例如,给玩具生产衣服,让孩子们能给自己喜爱的玩具穿上不同的衣服。于是命令发下去了。所以我们就需要新增这些类了。原创 2014-02-02 15:43:11 · 111 阅读 · 0 评论 -
PHP设计模式-模板模式(模板方法模式)
模板模式,也叫模板方法模式。它主要是利用继承的方法覆盖。在工厂模式系列中,我们就有讲到工厂方法模式利用的就是子类在继承父类时,将指定方法覆盖以实现不同子类的功能。我们来回顾一下,有一个生产玩具的工厂,他们都有生产玩具的能力,他们有三个车间生产不同的玩具,分别为熊玩具,狗玩具,猫玩具。每种玩具的生产方式和流程不一样。那么,如何设计?轻车熟路,首先我们有个玩具车间的抽象类,它指明各车间有生产玩具的能力原创 2014-02-02 16:24:48 · 627 阅读 · 0 评论 -
PHP设计模式-工厂系列(一)-简单工厂模式(静态工厂模式)
在设计模式中,工厂模式有三种,即:简单工厂模式、工厂方法模式 [ 附:PHP设计模式-工厂方法模式 ] 和 抽象工厂模式 [附:PHP设计模式-抽象工厂模式 ] 。那么,为什么取名叫叫工厂呢?我们都知道,工厂是生产产品的地方。给这些设计模式取名工厂的意思也就是告诉大家,这三种模式其实就是为了生产产品(即创建对象)。而且,这三者之中,以简单工厂最为简单(有点废话了)。原创 2014-02-02 15:27:42 · 176 阅读 · 0 评论 -
PHP设计模式-工厂系列(二)-工厂方法模式
在 简单工厂模式中我们描述了,一个工厂的领导,让车间主管生产产品的实例。回顾一下:class DogToy { } class CatToy { } class BearToy { } class FactoryManager { //指定我们工厂可以生产的玩具类型 public static原创 2014-02-02 15:36:25 · 148 阅读 · 0 评论 -
PHP设计模式-观察者模式(订阅者模式)
相信大家都用过QQ(没用过QQ的大叔不要扔我),而且大家都很讨厌QQ的小弹窗,不时地就会跳出一个小窗口,真心烦人。那么如果我们是腾讯消息推送的服务端开发人员。如果要用PHP来实现这种消息发送那么如果做到呢? 方案一。被动推送方式 我们采用推的方式来接收消息。也说说,由服务端向各位用户直接推送消息。我们考虑地简单一点,毕竟我们只是学习设计模式嘛。首先,我们需要原创 2014-02-02 15:48:28 · 540 阅读 · 0 评论 -
PHP设计模式-迭代器模式
在PHP中,我们经常会使用foreach来遍历数组中的元素。例如:$array = array( 'n1' => 'andrew', 'n2' => 'Delia', 'n3' => 'Qiqi', );foreach ($array as $key => $name) { echo "key=$key,name=$name".PHP_EOL; }原创 2014-02-02 15:52:25 · 118 阅读 · 0 评论 -
PHP设计模式-适配器模式
有一家创业公司,需要做一个具有购物和论坛两种功能的网站。为了节省开发成本,决定用一套开源的购物网站和一套开源的论坛站进行修改上线。在进行两套系统的用户合并的过程中,开发人员有点犯难了。两套系统的用户表结构都不一样。用户操作类也不一样。例如,我要查询一个用户的详细信息。在不同的系统中,实现不一样,返回结果也不一样。如下:class Shop_User { //根据用户ID查询用户信息 pu原创 2014-02-02 15:55:06 · 155 阅读 · 0 评论 -
PHP设计模式-建造者模式(构建者模式)
相信大家都听说过这么一个脑筋急转弯?把大象放进冰箱,要分几步?打开冰箱,把大象放进去,关上冰箱门。~~~哈哈。不错,就是宋丹丹小品里的一段。那么我们试着用程序实现一下?先建一个放大象的类,里面得有三个方法,开冰箱,放大象,关冰箱。So easy~class PushElephant{ public function openFridge() { echo "原创 2014-02-02 15:58:08 · 157 阅读 · 0 评论 -
PHP设计模式-代理模式
代理就是帮别人代干某事。例如,我每个月都要去银行交一次水费。interface Payable{ public function pay($amount);}class MyAccount implements Payable{ public function pay($amount) { echo "交水费"; }} 后来,同事告诉我,现在都不用到银行交消费了原创 2014-02-02 16:07:56 · 131 阅读 · 0 评论 -
PHP设计模式-策略模式
什么事情是让程序员最苦恼的?就是需求不停地变。有时候一天要变好几次,要上线好几版程序。如果代码结构设计地不好,就会陷入无穷无尽的粪坑,不光改起来麻烦,而且容易有一堆的bug。我就亲身经历过这样痛苦的过程。自从使用了策略模式,应对各种策略的改变就游刃有余了。策略模式真有这么利害?至少,我觉得在应对指定的一些需求,策略的不断,策略模式的确能起到举足轻重的作用。 那么什么是策略模式呢?如何使用呢原创 2014-02-02 16:11:14 · 584 阅读 · 0 评论 -
PHP内核分析-HASH函数
php的hash函数使用的是DXJB32A,经典time32算法如下:static inline unsigned long hash_func(char *arKey, unsigned int nKeyLength){ register long hash = 5381; while (nKeyLength) { hash = ((hash << 5) +原创 2014-02-02 15:05:37 · 161 阅读 · 0 评论