PHP中的SPL标准类库扩展 (一) 基础知识总结
来源:互联网 发布:电脑音乐合成器软件 编辑:程序博客网 时间:2024/05/22 06:51
摘自 http://www.imooc.com/learn/150
一、SPL标准类库
1.课程概述
(1) 什么是SPL
(2)SPL的基本框架
(3)SPL的常用数据结构
(4)SPL的常用迭代器
(5)SPL的接口
(6)SPL函数的使用
(7)SPL的文件处理类库
2.什么是SPL
--数学建模/数据结构
解决数据怎么存储的问题
--元素遍历
数据怎么查看的问题
--常用方法的统一调用
通用方法(数据、集合的大小)
自定义遍历
--类定义自动装载
让PHP程序适应大型项目的管理要求,把功能的实现分散到不同文件中
3.SPL的基本框架
数据结构--基础接口--基础函数--迭代器--异常--其他
二、SPL的常用数据结构
1-1.什么是数据结构
--数据结构是计算机存储、组织数据的方式。数据结构是数据之前存在
一种或多种特定关系的数据元素的集合
-- 解决的是软件开发中数据如何存储的问题
1-2.SPL提供哪些数据结构
--双向链表、堆栈、队列、堆、降序堆、升序堆、优先级队列、定义数组
、对象容器
2-1双向链表
--基本概念
Bottom:最先添加到链表中的节点叫Bottom(底部),也可以成为头部
(head)
Top:最后添加到链表中的节点叫Top(顶部)(尾部)
链表指针:是一个当前关注的节点的标识,可以指向任意节点
当前节点:链表指针指向的节点称为当前节点
节点名称:可以在链表中唯一标识一个节点的名称,我们称谓节点的key
或者offset
节点数据:存放在链表中的应用数据,我们通常称之为value
2-2 SplDoublyLinkedList类操作
-- 当前节点操作:rewind(返回当前指针头部)、current(返回当前指针)
、next(返回指针下一个)、prev(返回指针上一个)
-- 添加节点操作:push、unshift
--删除节点操作:pop、shift
--定位操作:bottom、top
--特定节点操作:offsetExists、offsetGet、offsetSet、offsetUnset
3-1堆栈--继承自SqlDoublyLinkedList的SqlStack类
操作
--push:压入堆栈(存入)
--pop:退出堆栈(取出)
三、SPL的常用迭代器
1-1PHP中的迭代器是通过Iterator接口定义的
-- current():mixed
-- key():scalar
-- next():void
-- rewind():void
-- valid:bool
2-1ArrayIterator迭代器
$it = new ArrayObejct($array);
3-1AppendIterator
$it = new AppendIterator();
$it = append($array);
4-1MultipleIterator迭代器
$mit = new MultipleIterato(MultipleIterator::MIT_KEYS_ASSOC);
$mit->attachIterator($idIter, 'ID');
$mit->attachIterator($nameIter, 'NAME');
5-1FileSystemIterator迭代器
//遍历当前所有文件
date_default_timezone_set('PRC');
$fileIter = new FileSystemIterator('.');
foreach($fileIter as $value){
sprintf("%s\t%s\t%8s\t%s\n",
date('Y-m-d H:i:s',$fileIter->getMTime()),
$fileIter->isDir()?"<DIR>":"",
number_famat($fileIter->getSize()),
$fileIter->getFileName()
);
}
四、SQL基础接口
1.常用接口
-Countable 继承了该接口的类可以直接电泳count()得到元素个数
class MyCount implements Countable{
protected $_count = 3;
public function count(){
return $this->_count;
}
}
$obj = new MyCount();
echo count($obj);
2.OuterIterator 如果想对迭代器进行一定的处理之后再返回,可以用这个
接口
如果想对迭代器进行一定的处理再返回,可以使用这个接
口,IteratorIterator类是OuterIterator的实现,扩展的时候可以直接继承
IteratorIterator
class OuterImp extends IteratorIterator{
public function current(){
return parent::current() . '_current';
}
public function key(){
return parent::key(). '_key';
}
}
$outerObj = new OuterImp(new ArrayIterator($array));
3.RecursiveIterator 可以对多层结构的迭代器进行迭代,比如一棵树
所有具有层次接口特点的数据都可以使用这个接口遍历
关键方法:
hasChildren方法用于判断当前节点是否存在子节点
getChildren方法用于得到当前节点子节点的迭代器
SPL中实现该接口的类
--RecursiveArrayIterator,RecusiveCachingIterator等以Recusive开头
的类都能进行多层次结构化的遍历
4.SeekableIterator 可用通过seek方法定位集合里面的特定元素
seek方法的参数是元素的位置,从0开始计算
--SPL中实现该接口的类有:AarrayIterator、DirectoryIterator、
FileSystemIterator、GlobIterator、RecusiveArrayIterator、
RecusiveDirectoryIterator
五、SPL函数的使用
1.SPL使用spl_autoload_register装载类
spl_autoload_extendsions('.php');
set_include_path(get_include_path().PATH_SEPARATOR.'libs/');
spl_autoload_register();
new Demo();
2.使用__autoload方法加载类
function __autoload($class_name){
require_once('lbs/'.$class_name.'.php');
}
function autoload($class_name){
requre_once('libs/'.$class_name.'.php');
}
spl_autoload_register(autoload);
new Test();
3.SPL通过自定义的__autoload函数加载类
function autoload($class_name){
set_include_path('libs/');
spl_autoload($class_name); 当我们不用reuqire或reuquire_once载
入类文件的时候,必须显示调用spl_autoload函数,参数是类的名称
}
spl_autoload_register(autoload);
new Test();
4.SPL其他函数
迭代器相关函数
1. iterator_apply为迭代器中每个元素调用一个用户自定义函数
2.iterator_count计算迭代器元素的个数
3.iterator_to_array将迭代器的元素拷贝到数组
类信息相关函数
1.class_implements 返回指定的类实现的所有接口
可以用instanceof语句判断某个对象是否实现了某个接口的或者是某
个类的实例
2.class_parents返回指定累的父类
如果继承了多次,会把所有的父类打印出来
六、SPL的文件处理类库
date_default_timezonoe_set('PRC');
$file = new SplFileInfo('tmp.txt');
$file->getCTime();//文件创建时间
$file->getMTime();//文件修改时间
$file->getSize();//文件大小
//读取文件里面的内容
$fileObj = $file->openFile('r');
while($fileObj->valid()){
echo $fileObj->fgets();
}
$fileObj = null; //关闭打开的文件
$file = null;
- PHP中的SPL标准类库扩展 (一) 基础知识总结
- PHP SPL 标准库
- php标准库SPL
- PHP spl 标准库
- PHP SPL标准库
- PHP SPL标准库
- php标准库(SPL)-SPL函数
- 标准php库SPL学习(一)简介
- php标准库(SPL)-数据结构(一)-SplDoublyLinkedList详解
- PHP SPL(PHP 标准库)
- PHP SPL(PHP 标准库)
- PHP SPL(PHP 标准库)
- PHP SPL标准库之SplFixedArray简介
- PHP SPL标准库之SplStack简介
- SPL(PHP标准库之数据结构)
- Php-SPL库中的迭代器接口详解
- Php-SPL库中的迭代器类详解
- Php SPL库中的迭代器接口详解
- Valid Palindrome
- Kotlin,来自初学者的心声
- CentOS配置之解决安装完成后无法上网
- JNI开发之环境搭建
- arm 汇编伪指令与位置相关代码
- PHP中的SPL标准类库扩展 (一) 基础知识总结
- Android面试题-如何退出Activity?如何安全退出已调用多个Activity的Application?
- Hbuilder结合git,让更改的页面标红
- React高阶组件原理与在Redux中的实践
- 常用jquery在线引用地址
- Java使用正则表达式验证常用字符串
- linux 常用命令
- 现在没什么事情,就复习一下(一)。
- 重定向和转发(转)