PHP基本扩展 - SPL - Iterators(迭代器)

PHP基本扩展 - SPL - Iterators(迭代器)

1 ArrayIterator
这个迭代器允许你删除或者修改键/值 当你遍历数组或者对象的时候
当你想遍历相同的数组多次, 你需要实例化一个 ArrayObject   并且建立一个   ArrayIterator 实例 来引用 foreach 循环或者手动调用  getIterator() 方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
ArrayIterator implements ArrayAccess , SeekableIterator , Countable , Serializable {
/* 方法 */
public void append ( mixed $value )
添加元素
public void asort ( void )
根据值排序数组
public __construct ([ mixed $array = array() [, int $flags = 0 ]] )
public int count ( void )
获取数组中元素的数量
public mixed current ( void )
获取当前值
public array getArrayCopy ( void )
获取数组的复制
public void getFlags ( void )
获取当前的标志
public mixed key ( void )
当前键
public void ksort ( void )
根据键排序
public void natcasesort ( void )
大小写不敏感的自然排序
public void natsort ( void )
大小写敏感的自然排序
public void next ( void )
移动到下一个
public void offsetExists ( string $index )
是否存在这个索引
public mixed offsetGet ( string $index )
获取索引所在的值
public void offsetSet ( string $index , string $newval )
设置索引所在的值
public void offsetUnset ( string $index )
unset 掉这个值
public void rewind ( void )
重置
public void seek ( int $position )
寻找位置
public string serialize ( void )
[5.3]序列化数组
public void setFlags ( string $flags )
设置标志
public void uasort ( string $cmp_function )
用户值排序
public void uksort ( string $cmp_function )
用户键排序
public string unserialize ( string $serialized )
[5.3]反序列化
public bool valid ( void )
检测是否存在更多的值
}

1.1 RecursiveArrayIterator 2 EmptyIterator
本函数可能不工作

1
2
3
4
5
6
7
8
EmptyIterator  implements Iterator  {
/* 方法 */
public void current ( void )
public void key ( void )
public void next ( void )
public void rewind ( void )
public void valid ( void )
}

3 IteratorIterator
迭代封装器允许转换任何可以转换的东西到迭代器, 最重要的是要明白大多数类没有实现迭代器功能的最有可能的原因是没有实现完整的迭代器特性. 技术应该避免出现错误或者异常信息.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
IteratorIterator implements OuterIterator {
/* 方法 */
public __construct ( Traversable $iterator )
将可以转换的建立成一个迭代器
public mixed current ( void )
当前值
public Traversable getInnerIterator ( void )
内部迭代器
public scalar key ( void )

public void next ( void )
移动到下一个元素
public void rewind ( void )
重置
public bool valid ( void )
是否可用

3.1 AppendIterator
附加迭代器,该附加迭代器不会破坏原有数组中的键值关系.
http://www.php.net/manual/en/appenditerator.construct.php
在迭代器之间循环迭代

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
AppendIterator extends IteratorIterator implements OuterIterator {
/* 方法 */
public __construct ( void )
public void append ( Iterator $iterator )
添加迭代器
public mixed current ( void )
获取当前值
public void getArrayIterator ( void )
获取数组迭代器, 用来存储 AppendIterator::append() 添加的迭代器
public Iterator getInnerIterator ( void )
返回当前的内部迭代器
public int getIteratorIndex ( void )
返回当前内部迭代器的索引, 比如说附加了两个迭代器,一个迭代器的索引是0,另外一个就是1,这样的.
public scalar key ( void )
获取当前的键
public void next ( void )
移动到下一个元素
如果是指的另外的一个迭代器,将重置另外的迭代器
public void rewind ( void )
重置
public bool valid ( void )
返回当前元素的有效性
}

[Attention]> 当使用 iterator_to_array() 函数需要将迭代器转换为数组的时候,需要将可选选项 use_key 设为false,否则的话,内部迭代器将会覆盖掉返回的数组,(也就是将返回第一次内部迭代器循环的数据),如果返回的话,没有必要保留原始键值

CachingIterator
通过Iterator迭代器支持缓存的迭代器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
CachingIterator extends IteratorIterator implements OuterIterator , ArrayAccess , Countable {
/* 常量 */
const integer CALL_TOSTRING = 1 ; // 转换所有元素->字串
const integer CATCH_GET_CHILD = 16 ; // 在访问子元素的时候不要抛出异常
const integer TOSTRING_USE_KEY = 2 ; // 转换字串的时候使用 key
const integer TOSTRING_USE_CURRENT = 4 ; // 使用 current 来转成字串
const integer TOSTRING_USE_INNER = 8 ; // 使用 inner 来转换字串
const integer FULL_CACHE = 256 ; // 缓存所有读取的数据
/* 方法 */
public __construct ( Iterator $iterator [, string $flags = self::CALL_TOSTRING ] )
public int count ( void )
// 数量
public void current ( void )
// 返回当前元素
public void getCache ( void )
// 获取缓存
public void getFlags ( void )
// 获取 flags
public Iterator getInnerIterator ( void )
// 获取内部迭代器
public void hasNext ( void )
// 检查是否存在另一个元素
public scalar key ( void )
// 键
public void next ( void )
// 下一个
public void offsetExists ( string $index )
// 存在这个索引
public void offsetGet ( string $index )
// 获取索引
public void offsetSet ( string $index , string $newval )
// 设置索引
public void offsetUnset ( string $index )
// unset
public void rewind ( void )
public void setFlags ( bitmask $flags )
// 设置标识
public void __toString ( void )
public void valid ( void )
// 是否可用
}

RecursiveCachingIterator
FilterIterator
CallbackFilterIterator
RecursiveCallbackFilterIterator
RecursiveFilterIterator
ParentIterator
RegexIterator
RecursiveRegexIterator
InfiniteIterator
LimitIterator
NoRewindIterator
MultipleIterator
RecursiveIteratorIterator
RecursiveTreeIterator
DirectoryIterator
目录访问迭代器提供了一个访问文件系统目录的的接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
DirectoryIterator  extends SplFileInfo  implements SeekableIterator  {
/* 方法 */
public __construct ( string $path )
通过给定的路径建立一个新的目录迭代器
public DirectoryIterator current ( void )
获取当前的迭代器条目
public int getATime ( void )
返回当前目录的最近一次的访问时间
public string getBasename ([ string $suffix ] )
获取文件全名,如果给定后缀名,则去掉后缀显示
public int getCTime ( void )
获取文件inode最后一次被修改的时间,返回unix 时间戳
public string getExtension ( void )
获取扩展
public string getFilename ( void )
获取当前条目的文件名称,和Basename不使用参数相同
public int getGroup ( void )
获取当前条目的组的id
public int getInode ( void )
获取当前条目的inode值
public int getMTime ( void )
文件上一次修改的unix时间戳
public int getOwner ( void )
文件所有者id
public string getPath ( void )
当前条目的路径,没有后缀 '/'
public string getPathname ( void )
获取文件的路径和文件名称,也就是说文件的完整位置
public int getPerms ( void )
当前文件的权限,以十进制形式返回
public int getSize ( void )
以字节形式返回文件的大小
public string getType ( void )
返回文件的类型,返回值有dir/file/link
public bool isDir ( void )
检测当前条目是否是目录
public bool isDot ( void )
检测当前条目是当前目录(.)或者是上级目录(..)
public bool isExecutable ( void )
检测文件是否是可执行文件
public bool isFile ( void )
检测是否是文件
public bool isLink ( void )
检测当前条目是否是快捷方式
public bool isReadable ( void )
检测当前条目是否可读
public bool isWritable ( void )
检测当前条目是否可写
public string key ( void )
返回键值
public void next ( void )
句柄下移一位
public void rewind ( void )
重置句柄
public void seek ( int $position )
移动到指定位置
public string __toString ( void )
以字串形式返回当前的迭代器条目
public bool valid ( void )
检测当前值是否可用
}

         FilesystemIterator                    GlobIterator                    RecursiveDirectoryIterator


原文地址 : PHP基本扩展 - SPL - Iterators(迭代器)
本站是作者语雀文档的镜像站, 如对文章有任何疑问请移步语雀进行 提问

PHP基本扩展 - SPL - 各种类及接口

PHP基本扩展 - SPL - 各种类及接口

ArrayObject
使用数组的方式来操作对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
ArrayObject implements IteratorAggregate , ArrayAccess , Serializable , Countable {
/* 常量 */
const integer STD_PROP_LIST = 1 ;
const integer ARRAY_AS_PROPS = 2 ;
/* 方法 */
public __construct ([ mixed $input [, int $flags = 0 [, string $iterator_class = "ArrayIterator" ]]] )
public void append ( mixed $value )
public void asort ( void )
public int count ( void )
public array exchangeArray ( mixed $input )
更换操作对象
public array getArrayCopy ( void )
public int getFlags ( void )
获取标记(定义的属性读取方式)
public ArrayIterator getIterator ( void )
通过一个实例获取一个新的迭代器
public string getIteratorClass ( void )
获取迭代器的类名称
public void ksort ( void )
public void natcasesort ( void )
public void natsort ( void )
public bool offsetExists ( mixed $index )
public mixed offsetGet ( mixed $index )
public void offsetSet ( mixed $index , mixed $newval )
public void offsetUnset ( mixed $index )
public void serialize ( void )
[5.3]序列化
public void setFlags ( int $flags )
public void setIteratorClass ( string $iterator_class )
public void uasort ( callable $cmp_function )
public void uksort ( callable $cmp_function )
public void unserialize ( string $serialized )
[5.3]反序列化
}

SplObserver
SplSubject


原文地址 : PHP基本扩展 - SPL - 各种类及接口
本站是作者语雀文档的镜像站, 如对文章有任何疑问请移步语雀进行 提问

PHP基本扩展 - SPL - 接口

PHP基本扩展 - SPL - 接口

  1. Countable
    继承了Countable 的类可以使用count函数来调用 类中的count 方法
    1
    2
    3
    4
    Countable {
    /* 方法 */
    abstract public int count ( void )
    }
    示例:
    http://php.net/manual/en/class.countable.php
    2. OuterIterator
    3. RecursiveIterator
    4. SeekableIterator

原文地址 : PHP基本扩展 - SPL - 接口
本站是作者语雀文档的镜像站, 如对文章有任何疑问请移步语雀进行 提问

PHP基本扩展 - SPL (PHP标准库)

PHP基本扩展 - SPL (PHP标准库)

介绍
SPL是用于解决典型问题(standard problems)的一组接口与类的集合。
安装
此扩展只能在php 5.0以后使用
此扩展从PHP 5.3.0 不再被关闭,会一直有效.成为php内核组件一部份
配置
函数
数据结构
SPL 提供了一系列的标准数据结构, 他们根据他们的底层实现进行分组, 这些通常定义他们公共的程序方式
Doubly Linked Lists(双联列表)> 双联列表是一系列的可以互联的双向链接节点. 迭代器的操作, 双向结束, 添加或者删除节点耗费的时间是O(1)当底层结构是DLL, 他提供了一种好的方法来执行队列和堆栈

SplDoublyLinkedList
SplStack
SplQueue
Heaps(堆)
“堆” 是树形结构数据, 他满足堆属性.  父节点的值一定大于或等于子节点的值。堆被认为在计算机算法中起到重要作用,并被用于各种编程语言,例如c++、Java等中
SplHeap> SplMaxHeap
SplMinHeap
SplPriorityQueue> Arrays(数组)
数组使用连续的方式存储数据, 通过索引访问, 不要和PHP数组混淆, PHP数组事实上是基于有序hash表的实现
SplFixedArray
Map
Map 是保存键/值数据, PHP数组可以认为是 数字/字串 => 值 的对应, SPL提供了一个对象->数据的Map, 这个 Map 能够使用为对象系列
SplObjectStorage

迭代器
PHP基本扩展 - SPL - Iterators(迭代器)
ArrayIterator
RecursiveArrayIterator
EmptyIterator
IteratorIterator
AppendIterator
CachingIterator
RecursiveCachingIterator
FilterIterator
CallbackFilterIterator
RecursiveCallbackFilterIterator
RecursiveFilterIterator
ParentIterator
RegexIterator
RecursiveRegexIterator
InfiniteIterator
LimitIterator
NoRewindIterator
MultipleIterator
RecursiveIteratorIterator
RecursiveTreeIterator
DirectoryIterator
FilesystemIterator
GlobIterator
RecursiveDirectoryIterator
接口
PHP基本扩展 - SPL - 接口
Countable> OuterIterator

RecursiveIterator
SeekableIterator

异常
LogicException
BadFunctionCallException
BadMethodCallException
DomainException
InvalidArgumentException
LengthException
OutOfRangeException
RuntimeException
OutOfBoundsException
OverflowException
RangeException
UnderflowException
UnexpectedValueException
SPL函数
array class_implements ( mixed $class [, bool $autoload ] )
返回指定的类实现的所有接口, 返回一个数组, 包含了指定类及父类实现的所有接口的名称
array class_parents ( mixed $class [, bool $autoload ] )
返回指定类的父类
array class_uses ( mixed $class [, bool $autoload = true ] )
[5.4.0] 返回给定的类引用的类[暂时这样理解]
int iterator_apply ( Traversable $iterator , callable $function [, array $args ] )
为迭代器中的每个元素调用一个用户自定义函数
int iterator_count ( Traversable $iterator )
计算迭代器中元素的个数
array iterator_to_array ( Traversable $iterator [, bool $use_keys = true ] )
将迭代器中的元素拷贝到数组
void spl_autoload_call ( string $class_name )
尝试调用所有已注册的函数来装在请求类, 手动设置函数来装在类或者接口
string spl_autoload_extensions ([ string $file_extensions ] )
注册并返回 spl_autoload 函数使用的默认文件扩展名
array spl_autoload_functions ( void )
返回所有已注册的__autoload()函数
bool spl_autoload_register ([ callback $autoload_function ] )
将函数注册到SPL __autoload函数栈中。如果该栈中的函数尚未激活,则激活它们
bool spl_autoload_unregister ( mixed $autoload_function )
注销已注册的__autoload()函数
void spl_autoload ( string $class_name [, string $file_extensions ] )
__autoload()函数的默认实现
array spl_classes ( void )
返回当前所有可用的 SPL 类的数组
string spl_object_hash ( object $obj )
返回指定对象的hash id
文件处理
SplFileInfo> SplFileObject

SplTempFileObject

各种类及接口
PHP基本扩展 - SPL - 各种类及接口
ArrayObject> SplObserver

SplSubject


原文地址 : PHP基本扩展 - SPL (PHP标准库)
本站是作者语雀文档的镜像站, 如对文章有任何疑问请移步语雀进行 提问