自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 awesome PHP之事件管理evenement

事件管理一直是js之类的语言的法宝,通过事件

2014-05-19 12:29:05 2079

原创 awesome PHP之依赖注入容器pimple

依赖注入(Dependency Injection)又叫控制反转(Inversion of Control)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,它能消除组件间的直接依赖关系,让组件的开发更独立,使用更灵活,在java框架中应用非常广泛。在php中由于语言特性不能完全照搬java的那一套,但简单的功能还是可以实现的。pimple就是php社区中比较流行的一种ioc容器。可以

2014-04-25 17:33:49 7927

转载 MySQL存储引擎的选择

两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。   我作为使用MySQL的用户角度出发,Innodb和MyISAM都是比较喜欢的,但是从我目前运维的数据库平台要达到需求:99.9%的稳定性,方便的扩展性和高可用性来说的话,MyISAM绝对是我的首选。      原因如下:

2014-04-10 19:37:44 889

原创 awesome PHP之monolog

monolog是php下比较全又容易扩展的记录日志组件。目前有包括Symfony 、Laravel、 CakePHP等诸多知名php框架都内置了monolog。可以通过github clone https://github.com/Seldaek/monolog.git 或者 composer安装  require monolog/monolog '~1.7'。monolog代码结果如下:

2014-04-07 15:54:43 6846

转载 PHP的包依赖管理工具Composer

Composer是一个基于项目的依赖管理器,负责将PHP项目所依赖的包或库安装到项目所在的目录中,默认它不会安装任何数据到全局。它用于取代之前所使用的pear工具。1 安装Composer[plain] view plaincopyprint?curl -sS https://getcomposer.org/installer | php

2014-03-18 15:59:19 4755

转载 AngularJS开发指南

AngularJS开发指南01:AngularJS简介2669angularjs  03-29 18:12  10-23 18:08  12 AngularJSAngularJS 开发指南AngularJS开发指南02:引导程序1576angularjs  03-29 18:13  07-09 16:27  2 AngularJSAngularJS 开发指南

2014-03-04 21:43:36 2584

原创 php多关键字匹配扩展

由于对php扩展的api不熟悉,扩展中大部分都是用原生c写的,也不支持php多线程的情况。扩展使用了wu-manber匹配算法(http://blog.csdn.net/pi9nc/article/details/9124623),可以应用各种场景的关键字匹配、提取、替换等功能(最常见的一个应用是一篇文章中关键字名字加上超链接)。代码地址:https://github.com/wzllai

2013-12-02 13:23:56 3010

原创 单元测试代码生成器

测试驱动开发的思想是先有测试后有业务代码,但有些时候我们更习惯先给业务代码饿方法命名好,然后写测试代码。下面针对zendframework写了一个简单的单元测试代码脚手架。<?php/** * a tool of generating unit test case code skeletion for zendFramework * * @author yongqiang *

2013-10-12 17:07:24 2210

原创 include|require(_once)? 在php底层实现

ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMP|VAR|CV, ANY){ USE_OPLINE zend_op_array *new_op_array=NULL; zend_free_op free_op1; zval *inc_filename; zval *tmp_inc_filename = NULL; zend_boo

2013-08-06 14:09:50 2133

原创 php foreach 遍历数据遇到的问题

先看代码function get_memory(){ echo memory_get_usage() . PHP_EOL;}$arr = range(1, 10001);//$b = $arr;echo "-----------------------normal traversal------------------------" . PHP_EOL;echo "be

2013-07-21 18:09:59 5847

原创 几种web并行化编程实现

当网站做到一定规模的时候,web单个页面需要涉及到的业务也会越来越多,每个页面可能会向后端发起几个、十几个甚至几十个请求。对于java、python之类的支持多线程的语言可以使用多线程编程,但也会增加程序的复杂性,像php这样的不支持多线程的语言只能借助其他方法了。下面总结以下几种比较实用的并行化编程的实现。1、yar 是鸟哥开发的一个 基于php扩展的RPC框架。//service.ph

2013-07-07 21:11:38 5028

转载 GNU/Linux平台的C开发及运行环境

在查询size命令的时候发现的文章,感觉不错,转下来。本文介绍在GNU/Linux环境下一个C程序由源代码到程序,到加载运行,最后终止的过程。同时以此过程为载体,介绍GNU/Linux平台下软件开发工具的使用。本文以我们最常见的hello, world!为例: #include main (){      printf(“hello, world

2012-12-15 20:39:55 1097

原创 SPL数据结构扩展

SPL是php标准库,将一些比较实用的函数、类和接口以库的形式放在php内核中,《PHP高级程序设计:模式、框架与测试》一书中对spl的讲解已非常详细,里面对数据结构这一块没有涉及到。spl里实现了几种简单的线性表和树型结构,包括了双链表和双链表实现的队列和栈、最大堆、最小堆和优先队列。    双链表对php开发程序来很重要的一种数据结构,可以把php数组中想想成一个双链表,而SplDoubl

2012-12-08 16:55:59 2764

原创 php的数组和spl固定数组

php固定数组隶属于php标准库(spl)的一种数据结构。和php普通数组相比,固定数组只能用整形定义其下标,并且如名字所示,是固定长度,它的优点是比普通数组占用的内存少,而且更快速,具体原因下文会做分析,先做一个简单的测试,将10W个a放入到数组中。define("MAX", 100000);//simple arrayfunction simple_arr(){ $i

2012-12-08 10:32:10 3286

原创 php共享内存实现

接着上上篇博客http://blog.csdn.net/wzllai/article/details/8231974 里面的问题,如何避免每次请求都包含文件。自己写扩展对当前业务来说解决显然有点小题大做,在php中其实可以用共享内存来解决这个问题。        共享内存是一种最为高效的进程间通信(IPC)方式,进程可以直接读写内存,而不需要任何数据的拷贝。php源码扩展中有个与共享内存相关的

2012-12-06 21:50:49 6306

原创 linux下php多进程编程

php在很多情况用在web开发中,通常情况下一次请求对应一个php进程,进程执行完返回数据销毁执行过程中的中间变量代码,在一些perfork类型的的sapi中,它又会等待下一个请求过来重新初始化执行环境、执行脚本,已经执行完成后的清理工作。但在如命令行下有时候一个进程满足不了需求,比如微博的异步发送,如果是用php脚本处理的话,脚本需要从发送队列中取数据,然后对数据进行处理,一个进程显然太慢,解决

2012-12-04 19:41:11 3133 1

原创 用c写一个提取股票信息的php扩展

工作中碰到一个业务方面的问题:要从用户输入的一堆内容中提取第一个触发到的股票代码或者名称使其能够按照股票分类。    之前的做法是把两千多个股票代码和对应的名字放在小文件中,每次请求都会包含文件然后解析,对应用的效率会有一定的影响。前段时间看了一下《Extending.and.Embedding.PHP》 这本书,就练习用C写了一个提取股票名称或者代码的php扩展,功能比较简单,具体实现了两个

2012-11-27 21:44:59 2100

原创 mysql读事务的隔离级别

碰到的问题:做sns系统,对发布和评论的操作做异步处理,将发布和评论插入mysql后的id放入队列中,有一个常驻php进程负责从队列从队列中取得id做后续一些列的计数、通知等操作。正式环境上客户端浏览器发布和评论后,php脚本从数据库里读不到相应id对应的内容了,而测试环境却可以。调试半天最后发现是mysql对tansaction_isolation(事务隔离级别)的配置不同。内网开发环境的隔

2012-11-08 20:13:43 7957 2

转载 设计模式总结

创建型模式Singleton模式解决的是实体对象个数的问题。除了Singleton之外,其他创建型模式解决的都是new所带来的耦合关系。Factory Method,Abstract Factory,Builder都需要一个额外的工厂类来负责实例化“易变对象”,而Prototype则是通过原型(一个特殊的工厂类)来克隆“易变对象”。如果遇到“易变类”,起初的设计通常从Factory M

2012-08-06 17:30:11 1954

原创 设计模式php实例:组合模式

组合模式有时候又叫做部分-整体模式,它把程序内部简单元素和复杂元素提供给客户端统一的接口,使客户端和程序的内部结构结构,内部可以随意更改扩展。从类图上看组合模式形成一种树形结构,由枝干和叶子继承Compont显然不符合里氏代换原则。组合模式类图:php代码实例(来自http://www.linuxso.com/architecture/32350.html):

2012-08-06 17:10:51 3487 2

原创 设计模式php实例:装饰者模式

扩展一个类一般可以使用继承或者组合的形式。使用继承的方式扩展时,随着基类子类的增多,以及子类的子类出现,继而出现了代码的无限制膨胀,增加了系统的复杂性。而使用装饰者模式既继承又引用,能动态扩展类的一些功能,减少了继承数量。装饰纸UML类图:php代码实例(出自php设计模式)/** * 装饰模式 */ /** * 抽象构件角色 */interface

2012-08-06 16:42:46 2813

原创 设计模式php实例:原型模式

原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。它允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,其工作原理是通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。它主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口(from百度百

2012-08-06 14:42:31 1952 1

原创 设计模式php实例:迭代器模式

迭代器模式提供一种访问一个容器对象中的各个元素,而又不暴露其内部细节的方法。在应用中,我们时常会遇到各种变量代码,foreach在很多代码处都可以见到,使用迭代器可以对不同数据结构的集合封装,外部只需调用迭代器提供的接口即可,提高了应用的可扩展性。迭代器UML类图PHP SPL中提供了迭代器接口Iterator和容器接口IteatorAggragateYII代码实例:

2012-08-05 22:04:21 2482

原创 设计模式php实例:策略模式

策略模式在于定义一系列的算法,并把它们封装起来,算法可以自由添加和替换,符合开闭原则,它降低了算法与具体的业务逻辑的耦合性。它还有一个优点是避免了代码中一些条件判断语句,当代码中出现了太多得判断语句的时候也可以考虑一下是否可以用策略模式。策略模式UML类图:ZF中代码实例:(再看一下 这个更像是观察者模式...)class Zend_Filter implement

2012-08-05 21:28:01 1340

原创 设计模式php实例:观察者模式

当一个对象状态发生改变后,会影响到其他几个对象的改变,这时候可以用观察者模式。像wordpress这样的应用程序中,它容外部开发组开发插件,比如用户授权的博客统计插件、积分插件,这时候可以应用观察者模式,先注册这些插件,当用户发布一篇博文后,就回自动通知相应的插件更新。观察者模式符合接口隔离原则,实现了对象之间的松散耦合。观察者模式UML图:在php SPL中已经提供SplSu

2012-08-05 21:02:16 6481

原创 设计模式php实例:适配器模式

适配器模式将一个类的换成客户端需要的另一个接口,使原本不兼容的接口能一起工作。一个现实中的例子,假如屋里墙上只有两项插口,而风扇有三个插头,这时需要再拿一个移动插线板,插线板接入墙壁插口的一段是两项插头,插线板另外一段能够提供三项插口给风扇,这时候插线板起到了一个适配器的作用。在应用中,适配器模式分为类适配器和对象适配器。类适配器类适配器中适配器继承原有的Adaptee

2012-08-05 19:54:47 5046 1

原创 设计模式php实例:工厂模式

在大的应用中如果每需要得到一个对象都要自己去new,程序的业务逻辑就很混乱,统一由工厂创建,便于管理和扩展。工厂模式主要针对的多态,如果该类可能有很多派生,使用工厂模式比较方便。工厂模式一般可以分为三类:简单工厂模式、工厂方法模式和抽象工厂模式。简单工厂模式:zf代码实例:class Zend_Db{//更具传人的apdater参数觉得实例化相应的db publ

2012-08-05 18:10:15 1472 1

原创 设计模式php实例:单例模式

单个类例模式要求一只能实例化一次,并且实例化的过程由该类自身执行。在一些情况下系统只需要一个全局的对象,以协调整个系统的行为。在具体的php应用中单例模式可以封装应用的配置,数据库连接等其他资源的加载,以达到节省空间资源的效果。另外在多线程的情况下(php应用中中并不多),比如同时进行文件创建、打开、修改一个文件的操作时用单例可以实现锁机制。单例模式在应用中减少了代码量,就像全局变

2012-08-05 15:21:53 964

转载 设计模式原则详解

这篇文章,不需要你一次就看懂,如果你真的能一次都看懂,我想设计模式对于你来说 已经没什么难度了..因为设计模式就是要体现这些原则的,你可以把设计原则看做是一门语言,设计模式是由这些语言编码的程序..你既然已经明白,精通了语 言,剩下的编码自然是很简单的事情,编码的越多则经验越多,经验越多则对原则的理解就越深...这是一个学习领悟的过程..     我希望这篇文章能帮助新人感受到设计模式的乐

2012-08-05 13:04:14 1152

原创 is_calleable、function_exits与method_exits函数用法

bool is_callable ( mixed $var [, bool $syntax_only [, string $callable_name ]] )is_calleable是测参数是否为合法的可调用结构第一个参数可以是函数名,可以是类或对象和方法数组。第二个参数是否对方法名只做语法检查,不判断是否可以调用,默认false第三个参数是将调用的名称传人一个变量中,感

2012-07-04 18:38:00 1283

原创 zendFramework分析3:控制器与视图

一个自动渲染带布局的hello word为例。在配置文件中设置布局文件的存放路径resources.layout.layoutPath = APPLICATION_PATH "/layouts/",引导程序会注册布局组件Zend_Layout。//控制器<?phpclass IndexController extends Zend_Controller_Action{ pu

2012-06-29 19:15:15 1634

原创 zendFramework分析2:引导程序

zendFramework引导过程通过Application组件完成,由于是对老版本的兼容扩展,其实现起来感觉没有yii那样优雅,它把类库当做资源,而原来那些类库又没有统一的接口,因此又需要新写资源类来间接配置和获取相应的资源。Zend_ApplicationzendFramework配置的加载通过入口文件实例Zend_Application来完成,构造方法通过初始化配置后,通

2012-06-29 17:08:11 1797

原创 zendFramework分析1:框架执行流程

1、通过url重写请求都定位到入口文件,默认是index.php2、入口文件加载系统的配置,单例生成前端控制器。老版本的框架需要在入口文件中添加部分配置和插件注册,后来由专门负责程序引导的Bootstrap类控制3、前端控制器初始化请求和返回对象,获取路由分发到具体控制器的动作4、控制器根据请求获取模型中数据5、控制器将数据渲染到视图流程可以由网上一张相关图的表示:

2012-06-29 16:22:31 3639 1

原创 YII框架分析笔记13:单元测试

先占个地方,以后补上。

2012-06-19 14:59:26 2882 3

原创 YII框架分析笔记12:主题管理

YII主题的控制由CThemeManager和CTheme管理,CThemeManager在应用初始化时作为核心组件注册,主题默认路径是app/themes/。主题配置由于主题组件在应用初始化时注册,其配置以及很方面,比如在app/themes/下有一个custom1主题在主配置文件中加入'theme'=>'custom1'键值对,在主题注册的时候会调用 CWebApplica

2012-06-19 14:42:08 4400 1

原创 YII框架分析笔记11:模块module

module是对相同业务逻辑的app中的内容模块化,比如博客前台系统可以模块化成blog,博客后台系统可以模块化成admin,模块化便于对应用的管理扩展。加载module的配置//加载框架中自带gii模块和一个自定义admin模块'modules'=>array( // uncomment the following to enable the Gii tool 'gii'=>

2012-06-18 20:15:39 5467 1

原创 YII框架分析笔记10:日志

yii框架中日志组件记录的等级5类,在CLogger已通过常量定义:const LEVEL_TRACE='trace';const LEVEL_WARNING='warning';const LEVEL_ERROR='error';const LEVEL_INFO='info';const LEVEL_PROFILE='profile';CLogger为所有日志写入和获取提

2012-06-17 16:56:33 3954

原创 YII框架分析笔记9:url路由

以创建url路由为例,从CWebApplication执行请求过程说起,如果在配置中设置了catchAllRequest,所有请求将会定位到配置中的路由中,否则的需要CUrlManager的parseUrl()方法解析解析url获取路由。/** * Parses the user request. * @param CHttpRequest $request the request app

2012-06-17 14:42:13 6617

原创 YII框架分析笔记8:CDataProvider

CDataProvider,顾名思义,数据提供者,它提供了三个抽象方法(fetchData,、fetchKeys 和 calculateTotalItemCount),分别为调用不同数据结构的数据提供了获取数据、获取键值、获取数量的,接口,在YII框架中,CActiveDataProvider、CArrayDataProvider、CSqlDataProvider是它的子类,除了提供数据之外,他还

2012-06-17 13:12:18 5452

原创 YII框架分析笔记7:挂件widget

widget好处是方面重用和灵活移动。CWidget是所有的widge父类,同时它又是是CBaseController的子类,CWidget提供了类似CController中的一些方法,但render()方法渲染的时候不带layout,而且渲染的时候$this指得是CWidget对象,而不是CController对象,CController对象可以通过其中的getController()方法获取,

2012-06-17 11:54:54 8559

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除