PHP SPL 标准库

SPL是用于解决典型问题的一组接口与类的集合。在PHP5.3.0以后成为了PHP内核组件的一部份。

一、SPL数据结构(结构数据里可放任意类型数据)
     
     1、双向链表接口SplDoublyLinkedList
$dbLink = new SplDoublyLinkedList();
$dbLink->unshift('张三');
$dbLink->unshift(array('李四'));
$dbLink->pop();
print_r($dbLink);

          派生类:
                   栈 SplStack
                   队列 SplQueue:添加了dequeue出队方法、enquenue入队方法
                         
$queue = new SplQueue();
$queue->enqueue('张三');
$queue->enqueue('李四');
$queue->dequeue();
print_r($queue);

     2、堆
          堆是一种特殊的二叉完全树。堆的一个主要特点是它以一定的偏序(a partial order)来保存所有节点[译者注:此处的偏序是指不完全的排序, 堆只需要满足父节点大于两个子节点,而子节点之间没有要求]。作为一颗完全树,一层中的节点是从左到右填满的。如果一个节点没有左儿子,那么它一定没有右儿子。并且在第h层中如果存在节点,那么第h-1层必须是填满的。堆有两种:最大堆和最小堆。最小堆中每个节点的优先级小于或者等于它的子节点;最大堆则相反,每个节点的优先级都大于或者等于它的子节点。图示最大堆(左)和最小堆(右):
     
          SplHeap是一个抽象类,必须实现里面的compare方法,如果第一个参数比第二个参数大则返回1,反之则返回-1,相等则返回0
          示例:
               
class people extends Splheap
{
      public function compare($arr1,$arr2)
      {
            if($arr1['age']>$arr2['age'])
            {
                 return 1;
            }
            else if($arr1['age']==$arr2['age'])
            {
                return 0;
            }
            else
            {
                 return -1;
            }
     }
}

$peopleHeap = new people();

$people1 = array('name'=>'张三','age'=>22);
$people2 = array('name'=>'李四','age'=>25);
$people3 = array('name'=>'王五','age'=>18);
$people4 = array('name'=>'赵六','age'=>30);

$peopleHeap->insert($people1);
$peopleHeap->insert($people2);
$peopleHeap->insert($people3);
$peopleHeap->insert($people4);

               结果如下:注意看,这里并不是所有顺序按从大到小的,最大堆只需要满足父节点大于两个子节点。二茶树图片如下
               
          
               
          派生类
               SplMinHeap 自己实现了一个compare方法
               SplMaxHeap 自己实现了一个compare方法
          很遗憾目前还不知堆在实际应用中用在什么地方,汗...
               
     3、陈列                
               固定数组 SplFixedArray 
                    示例:
                         
$fixArr = new SplFixedArray(3);
$fixArr[0]='a';
$fixArr[1]='b';
$fixArr[2]='2';
//$fixArr[3]='e';#抛出RuntimeException异常

$fixArr->setSize(4);#重新扩大长度
$fixArr[3]='e';#扩大后不再报异常

     4、映射
               SplObjectStorage提供了类似JAVA的map特性,但是这里 只能放对象,虽然数组也能实现一些功能,但是使用映射更得心应手。
               部分方法说明:
                    attach(object) 加入对象
                    contains(object) 返回对象是否在map中
                    detach(object) 删除map中的该对象
                    current(void)     当前位置对象     
                    valid(void)     当前位置数值是否有效,常配置next用在遍历上
               注意,attach对象到映射中时,映射中记录的是该对象的地址,因此对象发生改变后,映射中的对象也会随之改变
               示例:
                    
$storage = new SplObjectStorage();

$people1 = new stdClass;
$people2 = new stdClass;
$people3 = new stdClass;


$storage->attach($people1);
$storage->attach($people2);
$storage->attach($people3);

$people1->name = "张三";

print_r($storage);
var_dump($storage->contains($people1));

                    
二、SPL 接口
     1、Countable 实现该接口的类可以被用于count()函数
          必须实现里面的抽象方法public count(void);
     2、OuterIterator 实现该接口的类可以被用于循环foreach
          必须实现抽象方法:current,key,next,rewind,valid
     3、RecursiveIterator和上面的OuterIterator一样
     4、SeekableIterator 实现该接口的类可以使用seek,next,rewind,valid,current,当然你必须实现这几个方法
     感觉:项目中感觉用到的不多。
三、SPL 函数
     1、class_parents 返回指定类的父类,成功返回一个数组,失败返回FALSE
     2、与autoload相关函数
           我们知道__autoload魔术方法,在使用不存在的类时会自动先调用该方法,而SPL提供的函数可以更加细致。
          a、 __autoload是当类不存在时自动调用的一个魔术函数,无法做到算定义函数或类,这时你可以使用spl_autoload_register('my_func_name') 注册一个函数名 ,也可以注册一个类中的方法spl_autoload_register(array(‘class_name','method_name')); 我们可以同时注册多个函数或类中某方法到autoload_functions链表中,如果依然不存在类会依次调用队列中注册的方法。
          b、使用spl_autoload_extensions与spl_autoload的配合
               spl_autoload_extensions('class.php');#这里有多个可以用都好隔开
               spl_autoload('Controller');
               #此时系统会自动将类名Controller转为全小写然后拼上扩展名去包含路径中查找。
           
四、各种类及接口
     1、ArrayObject
          继承它类中的成员就相当于一个数组元素了,比如正常是$obj->name,你可以这样使用$obj['name'],你也可以遍历、count等等像数组一样的操作,很多框架用到了这个类
     2、SplObserver 与 SplSubject 是为便于实现观察者模式出现的。
               SplSubject 中必须实现三个抽象方法 attach、detach、nofity
               SplObserver 中必须实现update方法
五、SPLType 类
     有了它,你就可以限制PHP变量的类型了,这玩意感觉在项目中不太适用,浪费性能,它的原理也很简单, 就是在类中__set的时候判断下类型,如果类型不正确就throw new 一个异常
     SplInt           整型
     SplFloat       浮点型
     SplEnum      枚举  ,其实就是在类中定义多个public static const 成员常量而已。     
     SplBool        布尔型
     SplString      字符串 
详细描述:内容简介本书采用循序渐进的方式介绍了用PHP 进行Web 开发的相关知识。书中首先从OOP 采用的机制—— 抽象类、接口、契约式编程开始讲起,然后介绍了静态方法、单例模式、工厂模式和PHP 6 的新特性等内容,接着介绍了测试和文档方面的内容,还介绍了标准PHPSPL 方面的知识以及PHP 开发人员最有可能用到的MVC 模式,最后介绍了Ajax 、JSON 、SOAP Web 服务以及SSL 客户端验证等Web 2.0 方面的内容。本书适合中、高级的PHP 程序员阅读。媒体评论 “很长时间没有看到这样有价值的PHP高级图书了,我从本书中获益匪浅。强烈推荐!”                   ——Quentin Zervaas,资深PHP程序员,《PHP Web 2.0开发实战》一书作者  “本书是我读过的最好的技术书,推荐阅读。”                   ——Amazon.com 目录第一部分 OOP和模式 第1章 抽象类、接口和契约式编程 第2章 静态变量、成员和方法 第3章 单例模式和工厂模式 第4章 异常 第5章 PHP 6中的新特性第二部分 测试和文档编写 第6章 文档编写和编码规范 第7章 反射API  第8章 测 试、部署和持续集成第三部分 SPL(标准PHP库) 第9章 SPL简介 第10章 SPL迭代器 第11章 SPL文件和目录处理 第12章 SPL数组重载 第13章 SPL异常第四部分 MVC模式 等 。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值