
php
wzllai
这个作者很懒,什么都没留下…
展开
-
PHP的包依赖管理工具Composer
Composer是一个基于项目的依赖管理器,负责将PHP项目所依赖的包或库安装到项目所在的目录中,默认它不会安装任何数据到全局。它用于取代之前所使用的pear工具。1 安装Composer[plain] view plaincopyprint?curl -sS https://getcomposer.org/installer | php转载 2014-03-18 15:59:19 · 4854 阅读 · 0 评论 -
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 · 6891 阅读 · 0 评论 -
php多关键字匹配扩展
由于对php扩展的api不熟悉,扩展中大部分都是用原生c写的,也不支持php多线程的情况。扩展使用了wu-manber匹配算法(http://blog.youkuaiyun.com/pi9nc/article/details/9124623),可以应用各种场景的关键字匹配、提取、替换等功能(最常见的一个应用是一篇文章中关键字名字加上超链接)。代码地址:https://github.com/wzllai原创 2013-12-02 13:23:56 · 3052 阅读 · 0 评论 -
单元测试代码生成器
测试驱动开发的思想是先有测试后有业务代码,但有些时候我们更习惯先给业务代码饿方法命名好,然后写测试代码。下面针对zendframework写了一个简单的单元测试代码脚手架。<?php/** * a tool of generating unit test case code skeletion for zendFramework * * @author yongqiang *原创 2013-10-12 17:07:24 · 2366 阅读 · 0 评论 -
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 · 2279 阅读 · 0 评论 -
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 · 5896 阅读 · 0 评论 -
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 · 1322 阅读 · 0 评论 -
用c写一个提取股票信息的php扩展
工作中碰到一个业务方面的问题:要从用户输入的一堆内容中提取第一个触发到的股票代码或者名称使其能够按照股票分类。 之前的做法是把两千多个股票代码和对应的名字放在小文件中,每次请求都会包含文件然后解析,对应用的效率会有一定的影响。前段时间看了一下《Extending.and.Embedding.PHP》 这本书,就练习用C写了一个提取股票名称或者代码的php扩展,功能比较简单,具体实现了两个原创 2012-11-27 21:44:59 · 2179 阅读 · 0 评论 -
SPL数据结构扩展
SPL是php标准库,将一些比较实用的函数、类和接口以库的形式放在php内核中,《PHP高级程序设计:模式、框架与测试》一书中对spl的讲解已非常详细,里面对数据结构这一块没有涉及到。spl里实现了几种简单的线性表和树型结构,包括了双链表和双链表实现的队列和栈、最大堆、最小堆和优先队列。 双链表对php开发程序来很重要的一种数据结构,可以把php数组中想想成一个双链表,而SplDoubl原创 2012-12-08 16:55:59 · 2811 阅读 · 0 评论 -
php的数组和spl固定数组
php固定数组隶属于php标准库(spl)的一种数据结构。和php普通数组相比,固定数组只能用整形定义其下标,并且如名字所示,是固定长度,它的优点是比普通数组占用的内存少,而且更快速,具体原因下文会做分析,先做一个简单的测试,将10W个a放入到数组中。define("MAX", 100000);//simple arrayfunction simple_arr(){ $i原创 2012-12-08 10:32:10 · 3346 阅读 · 0 评论 -
php共享内存实现
接着上上篇博客http://blog.youkuaiyun.com/wzllai/article/details/8231974 里面的问题,如何避免每次请求都包含文件。自己写扩展对当前业务来说解决显然有点小题大做,在php中其实可以用共享内存来解决这个问题。 共享内存是一种最为高效的进程间通信(IPC)方式,进程可以直接读写内存,而不需要任何数据的拷贝。php源码扩展中有个与共享内存相关的原创 2012-12-06 21:50:49 · 6354 阅读 · 0 评论 -
linux下php多进程编程
php在很多情况用在web开发中,通常情况下一次请求对应一个php进程,进程执行完返回数据销毁执行过程中的中间变量代码,在一些perfork类型的的sapi中,它又会等待下一个请求过来重新初始化执行环境、执行脚本,已经执行完成后的清理工作。但在如命令行下有时候一个进程满足不了需求,比如微博的异步发送,如果是用php脚本处理的话,脚本需要从发送队列中取数据,然后对数据进行处理,一个进程显然太慢,解决原创 2012-12-04 19:41:11 · 3181 阅读 · 1 评论 -
正则选择性匹配
遇到这样一个需求:给定一个关键字,匹配一段话或一篇文章中的文字,把匹配的文字做标红处理。一开始用php自带的str_replace函数对匹配的关键字做替换:$replace = '' . $keyword . '';str_replace($replace, $needle, $content);但是遇到问题是现在内容格式的html格式的,如果html属性中有命中关键字的话,font原创 2011-09-08 21:21:38 · 2484 阅读 · 0 评论 -
awesome PHP之依赖注入容器pimple
依赖注入(Dependency Injection)又叫控制反转(Inversion of Control)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,它能消除组件间的直接依赖关系,让组件的开发更独立,使用更灵活,在java框架中应用非常广泛。在php中由于语言特性不能完全照搬java的那一套,但简单的功能还是可以实现的。pimple就是php社区中比较流行的一种ioc容器。可以原创 2014-04-25 17:33:49 · 8047 阅读 · 0 评论