0%

PHP SPL笔记

SPL = Standard PHP Library = PHP标准库
是用来解决典型问题的一组接口与类的集合。

所提供的接口、类非常多,分好几个大类,有专门处理数据结构的,有专门处理异常的。
具体可查阅:https://www.php.net/manual/zh/book.spl.php
这边我就先学习下SPL的接口方面。

接口

Countable — 当对实现了Countable接口的类使用count()函数时,会调用类的count方法。
OuterIterator — 用于迭代(迭代器)的迭代器。比一般迭代器多了一个getInnerIterator方法,可返回当前迭代器。
RecursiveIterator — todo
SeekableIterator — todo

Countable例子

1
2
3
4
5
6
7
8
9
10
class Example implements Countable
{
private $count = 100;
public function count()
{
return $this->count;
}
}
$Example = new Example();
echo count($Example); // 100

OuterIterator例子

接口摘要:

1
2
3
4
5
6
7
8
9
10
11
OuterIterator extends Iterator {
/* 方法 */
public getInnerIterator ( void ) : Iterator

/* 继承的方法 */
abstract public Iterator::current ( void ) : mixed
abstract public Iterator::key ( void ) : scalar
abstract public Iterator::next ( void ) : void
abstract public Iterator::rewind ( void ) : void
abstract public Iterator::valid ( void ) : bool
}

PHP内置的IteratorIterator迭代器,实现了OuterIterator接口,IteratorIterator迭代器摘要:

1
2
3
4
5
6
7
8
9
10
IteratorIterator implements OuterIterator {
/* 方法 */
public __construct ( Traversable $iterator )
public current ( void ) : mixed
public getInnerIterator ( void ) : Traversable
public key ( void ) : mixed
public next ( void ) : void
public rewind ( void ) : void
public valid ( void ) : bool
}

使用IteratorIterator,以此来体验下OuterIterator

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
// 创建一个去处字符串头尾空格的迭代器,重写current方法。
class TrimIterator extends IteratorIterator
{
public function current()
{
return trim(parent::current());
}
}

// 迭代器IteratorIterator构造方法只接受一个可迭代的迭代器
$item = new TrimIterator(new ArrayIterator([
'itmea ',
' itemb',
' itemc '
]));
// 测试是否能正常迭代
foreach ($item as $key => $value) {
echo $key.'--';
echo $value;
echo "\n";
}
/*
0--itmea
1--itemb
2--itemc
*/

// 测试调用OuterIterator特有的getInnerIterator方法
var_dump($item->getInnerIterator());
/*
object(ArrayIterator)#1 (1) {
["storage":"ArrayIterator":private]=>
array(3) {
[0]=>
string(6) "itmea "
[1]=>
string(6) " itemb"
[2]=>
string(7) " itemc "
}
}
*/

欢迎关注我的其它发布渠道