PHP中的SPL库

Posted by jintang on 2013-11-02

SPL,PHP 标准库(Standard PHP Library) ,此从 PHP 5.0 起内置的组件和接口,并且从 PHP5.3 已逐渐的成熟。SPL 其实在所有的 PHP5 开发环境中被内置,同时无需任何设置。
似乎众多的 PHP 开发人员基本没有使用它,甚至闻所未闻。究其原因,可以追述到它那阳春白雪般的说明文档,使你忽略了「它的存在」。SPL 这块宝石犹如铁达尼的「海洋之心」般,被沉入海底。而现在它应该被我们捞起,并将它穿戴在应有的位置 ,而这也是这篇文章所要表述的观点。
那么,SPL 提供了什么?

SPL 对 PHP 引擎进行了扩展,例如 ArrayAccess、Countable 和 SeekableIterator 等接口,它们用于以数组形式操作对象。同时,你还可以使用 RecursiveIterator、ArrayObejcts 等其他迭代器进行数据的迭代操作。
它还内置几个的对象例如 Exceptions、SplObserver、Spltorage 以及 splautoloadregister、splclasses、iteratorapply 等的帮助函数(helper functions),用于重载对应的功能。

类自动加载

目录结构:

1
2
3
4
|- MyClass
|----Loader.php
|----Test.php
|- index.php

入口文件index.php

1
2
3
4
5
6
7
8
9
10
<?php

define("BASEDIR", __DIR__);
include BASEDIR . '/MyClass/Loader.php';

spl_autoload_register('\\MyClass\Loader::autoload');

\MyClass\Test::run();

?>

Loader.php

1
2
3
4
5
6
7
8
9
10
11
<?php
namespace MyClass;

class Loader
{
public static function autoload($class)
{
require_once BASEDIR . '/' . $class . '/php';
}
}
?>

Test.php

1
2
3
4
5
6
7
8
9
10
11
<?php
namespace MyClass;

class Test
{
public static function run()
{
echo "this is test run!";
}
}
?>

数据结构

1
2
3
4
5
$stack = new SplStack();
$stack->push("data1\n");
$stack->push("data2\n");
echo $stack->pop();
echo $stack->pop();

队列

1
2
3
4
5
$queue = new SplQueue();
$queue->enqueue("data1\n");
$queue->enqueue("data2\n");
echo $queue->dequeue();
echo $queue->dequeue();

1
2
3
4
5
$heap = new SplMinHeap();
$heap->insert("data1\n");
$heap->insert("data2\n");
echo $heap->extract();
echo $heap->extract();

固定尺寸队列

1
2
3
$array = new SplFixedArray(10);
$array[0] = 123;
$array[1] = 1234;

更多

  • 迭代器
  • 接口
  • 异常
  • SPL 函数
  • 文件处理
  • 各种类及接口

参考手册:http://www.php.net/manual/zh/book.spl.php