spl,指SPL - Standard PHP Library 标准PHP类库。
基本介绍
SPL - Standard PHP Library SPL is a collection of interfaces and classes that are meant to solve standard problems and implements some efficient data access interfaces and classes. You'll find the classes documented using php code in the file spl.php or in corresponding .inc files in subdirectories examples and internal. Based on the internal implementations or the files in the examples subdirectory there are also some .php files to experiment with.
The .inc files are not included automatically because they are sooner or later integrated into the extension. That means that you either need to put the code of examples/autoload.inc into your autoprepend file or that you have to point your ini setting auto_prepend_file to that file.
Below is a list of interfaces/classes already availabel natively through the SPL extension grouped by category.
全面剖析
SPL(Standard PHP Library) IN PHP5
下一步中大型PHP商业应用的主流的开发将会是以OO,OA软件开发模式主领潮流,从PHP5到PHP6,google Trends足以证明这一点,过去传统的
面向过程的开发模式将会被弃之,如果你是一位真正合格程序员,你会发现OO所带来的好处是深远的,不仅是软件工程所带来的收益,而且此种思维理念对个人思维方式定有大的变革,你会发现你做事情开始OO方式,OO无处不在.
当然笔者不想去论述用面向过程写PHP代码所带来的好处(如简单的应用),那种单人时代的开发方式如儿童时代已不适合需求复杂,变化过快的现代商业环境.笔者发现,如今支持面向过程的开发者大多知识不够全,不够广.还不足以用OO来解决商业开发.当然这不是绝对,但一位有着C++,JAVA,
Smalltalk、EIFFEL等开发语言背景的程序员,他会无一不支持OO开发模式,相反网络知识框架基础较少,各种协议一知半解,只会PHP的开发人员他们会觉得面向过程最适合他们.
前景
a.文档的完善与标准如何?
b.背后商业公司或是财团支持如何?
d.业务与显示是否分离与清晰?C OR VC OR MVC
e.数据结构如何,数据表优化如何?数据驱动支持?
f.开发进度如何?核心开发成员水平如何,要注意原核心团队的去留?
g.代码内置调试如何,代码纠错处理过程怎样?
h.有无自己核心开发框架?有无采用流行的框架?
i.权限管理等基础CMS功能如何?可扩展,或开发程度如何?
j.现在用户群如何?可通过google trends来找答案
综上所述,我们怎样选择CMS做二次开发.当然还有诸合本身团队的水平等等因素要想进去,希望决策者不要失误,以免将来损失惨重.
不管是二次开发,还是自己全部重新设计,我们都得要有一个大前提,那就是最大化提高系统平台生命周期,国内很多phper开发者,很多项目的生命周期短得可怜,阅其代码坚酸难懂,接手的开发人员像被强奸的感觉, 笔者认为合格的PHP程序员应把代码看成是一种艺术, 一个好不好的操作平台是否拥有良好的可扩展性,布局,可维护性是其根本的基础.其核心框架必需高度抽象化,有良好的命名空间与对象接口, 这样才能算是进入贵族艺术编程世界.
一个项目的成功不是决定于技术的先进度如何,它有很多因素决定.在此,笔者就不在这里谈论如何运作网络商业,只谈PHP极限编程艺术世界.
PHP之旅
迭代器(Iterator)、
数组对象(ArrayObject)、运行期违例(RuntimeException InvalidArgumentException……)、观察者模式(Observer Pattern)等一些解决方案。详情可参考官方的API.
查看命令
查看SPL所有类与方法,我们可以用以下语句: print_r(spl_classes());
我会详细说明此这10大接口的设计理念.PHP所有编程万变不离其宗.
SPL有以下接口(10大接口)
1.ArrayAccess 其功能是使类可以像PHP中的
数组一样操作。有点类似于.net平台的index操作。
2.Traversable 是
Zend引擎的内置接口,它是能让类用于foreach语句的接口,但是在PHP中并不能直接实现Traversable。只能间接地通过Iterator或IteratorAggregate接口实现。
3.IteratorAggregate(继承Traversable,是他的儿子)是除Iterator之外另一个从Traversable接口中继承而来的。其接口也很简单,只有一个函数。就是返回一个
迭代器实例
4.Iterator(也是继承Traversable,是他的儿子),SPL中大部分接口和类都是从这个接口继承而来的。
5.RecursiveIterator (继承Iterator,为Traversable的孙子),递归迭代器,通过hasChildren()和getChildren()两个函数实现递归遍历子元素。
6.Countable 这接口就一个count()函数,返回
结果集的数量。实现这个接口的类可以用count()函数查询其结果集。
7.Serializable 该接口实现序列化和反序列化的接口。在没有SPL之前,可以通过__sleep() 和__wakeup()实现相同的功能,若同时实现了Serializable 接口和_sleep() 和__wakeup(),则只有
Serializable接口的函数启作用。
8.SplObserver Observer观察者模式的中的观察者。
9.SplSubject Observer观察者模式的中的发布者。
10.OuterIterator 它的实现者可以包含一个或多个
迭代器成员,即可以通过getInnerIterator()
接口函数获取内部的迭代器,也可以直接通过类本身实现的Iterator接口遍历内部的迭代器数据。这在SPL是一个非常重要的接口,SPL中很多内置的迭代器实现了这个接口。
(接口分析未完成,更新中...)
SPL中已经声明的类。
1.DirectoryIterator 这个类用来查看一个目录中的所有文件和子目录
2.FilterIterator 这是一个抽象类,它实现了OuterIterator接口。它包装一个已有的
迭代器类,通过抽象方法accept()过滤掉不需要的内容,形成一个新的迭代器。
3.LimitIterator 这也是一个实现OuterIterator的类。它有点类似于SQL中的LIMIT语句。它通过包装一个已有迭代器,然后截取其中某一段数据形成一个新的迭代器。
4.RecursiveDirectoryIterator 递归查看一个目录中的所有文件的子目录。
5.SimpleXMLIterator 一个遍历XML内容的类
6.IteratorIterator 实现对迭代器的包装,这也是SPL中对OuterIterator默认实现。
7.InfiniteIterator 从字面意思就知道,这是个无限循环的
迭代器,当next()到达最后时,会自动调用rewind()函数,又从头开始。
8.AppendIterator 它实现了对一系统迭代器的包装,并且可以在运行过程中添加新的迭代器。
9.SplFileObject 文件操作类,可以按行的方式遍历文件内容。同时还能获取文件的大小及其它详细信息。
10.SplFileInfo 获取文件信息类。SplFileObject 从该类继承。
错误处理是一大块:
下面来我讲讲PHP->SPL 关于错误处理方面的架构:
Exception 这是错误处理的接口,这是个值得一提,在所有程序中都会用到的父类.
笔者也想不通,为什么作者不作Exception做为一个接口呢???我得想想.
一个是LogicException (逻辑错误处理类)
一个是RuntimeException(实时错误处理类)