版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。http://blog.csdn.net/mayongzhan - 马永占,myz,mayongzhan
StandardPHPlibrary Module (SPL标准库)
关于SPL的产生可以参考php源码包内的ext下的spl
SPL分为几大类
1. Iterators : SPL offers some advanced iterator algorithms。迭代器: SPL 提供了一些高级的迭代器运算法则。
2. Directories and Files : SPL offers two advanced directory and file handling classes:目录和文件:SPL提供了两个高级路径和文件处理类。
3. XML : SPL offers an advanced XML handling class:XML : SPL提供了一个高级XML处理类。
4. Array Overloading : SPL offers advanced Array overloading:数组重载 :SPL提供了高级数组重载。
5. Counting : interface Countable allows to hook into the standard array function count().计数:接口Countable 允许勾住标准数组方法count().
6. Exceptions : SPL provides a set of standard Exception classes each meant to indicate a certain problem type. 异常:SPL规定了一套标准异常类,每个类都标识了一类确定的问题。
7. Observer: SPL suggests a standard way of implementing the observer pattern.观察者:SPL提出了实现观察者模式的标准。
简单的来说这些都是object,都是php已经封装好的为了方便某些功能的类,相当符合面向对象...
一些例子:
得到SPL相关类的方法
DirectorIterator
ArrayObject
ArrayIterator
Recursive Array Iterator
PDO & IteratorIterator
FilterIterator
XML & RecursiveIteratorIterator
SimpleXMLIterator
LimitIterator & ArrayIterator
SPLFileObject
得到SPL相关类的方法
<?php
foreach(get_class_methods(new DirectoryIterator('./')) as $key=>$method)
{
echo $key.' -> '.$method.'<br />';
}
?>
DirectoryIterator
<?php
try{
/*** class create new DirectoryIterator Object ***/
foreach ( new DirectoryIterator('./') as $Item )
{
echo $Item.'<br />';
}
}
/*** if an exception is thrown, catch it here ***/
catch(Exception $e){
echo 'No files Found!<br />';
}
?>
ArrayObject
<?php
/*** a simple array ***/
$array = array('koala', 'kangaroo', 'wombat', 'wallaby', 'emu', 'kiwi', 'kookaburra', 'platypus');
/*** create the array object ***/
$arrayObj = new ArrayObject($array);
/*** iterate over the array ***/
for($iterator = $arrayObj->getIterator();
/*** check if valid ***/
$iterator->valid();
/*** move to the next array member ***/
$iterator->next())
{
/*** output the key and current array value ***/
echo $iterator->key() . ' => ' . $iterator->current() . '<br />';
}
?>
ArrayIterator
<?php
/*** a simple array ***/
$array = array('koala', 'kangaroo', 'wombat', 'wallaby', 'emu', 'kiwi', 'kookaburra', 'platypus');
try {
/*** create a new object ***/
$object = new ArrayIterator($array);
/*** rewind to the beginning of the array ***/
$object->rewind();
/*** check for valid member ***/
while($object->valid())
{
/*** echo the key and current value ***/
echo $object->key().' -> '.$object->current().'<br />';
/*** hop to the next array member ***/
$object->next();
}
}
catch (Exception $e)
{
echo $e->getMessage();
}
?>
<?php
$array = array(
array('name'=>'butch', 'sex'=>'m', 'breed'=>'boxer'),
array('name'=>'fido', 'sex'=>'m', 'breed'=>'doberman'),
array('name'=>'girly','sex'=>'f', 'breed'=>'poodle')
);
foreach(new RecursiveIteratorIterator(new RecursiveArrayIterator($array)) as $key=>$value)
{
echo $key.' -- '.$value.'<br />';
}
?>
PDO & IteratorIterator
<?php
// check for errors
error_reporting(E_ALL);
try {
$dsn = new PDO("sqlite2:/home/kevin/html/periodic.sdb");
// the result only implements Traversable
$stmt = $dsn->prepare('SELECT * FROM periodic ORDER BY atomicnumber');
// exceute the query
$stmt->execute();
// the result should be an instance of PDOStatement
// IteratorIterator converts it and after that you can do any iterator operation with it
// The iterator will fetch the results for us.
$it = new IteratorIterator($stmt);
// the iterator object now has 5 arrays within.
// Each array contains a result set from the db query
foreach($it as $row)
{
// create the array object
$arrayObj = new ArrayObject($row);
// iterate over the array
for($iterator = $arrayObj->getIterator();
// check if valid
$iterator->valid();
// move to the next array member
$iterator->next())
{
// output the key and current array value
echo $iterator->current() . '<br />';
}
echo '<hr />';
}
$dsn = null;
}
catch (PDOException $e)
{
print "Error!: " . $e->getMessage() . "<br />";
}
?>
FilterIterator
<?php
/*** a simple array ***/
$animals = array('koala', 'kangaroo', 'wombat', 'wallaby', 'emu', 'NZ'=>'kiwi', 'kookaburra', 'platypus');
class CullingIterator extends FilterIterator{
/*** The filteriterator takes a iterator as param: ***/
public function __construct( Iterator $it ){
parent::__construct( $it );
}
/*** check if key is numeric ***/
function accept(){
return is_numeric($this->key());
}
}/*** end of class ***/
$cull = new CullingIterator(new ArrayIterator($animals));
foreach($cull as $key=>$value)
{
echo $key.' == '.$value.'<br />';
}
?>
XML & RecursiveIteratorIterator
<?php
/*** a simple xml tree ***/
$xmlstring = <<<XML
<?xml version = "1.0" encoding="UTF-8" standalone="yes"?>
<document>
<animal>
<category id="26">
<species>Phascolarctidae</species>
<type>koala</type>
<name>Bruce</name>
</category>
</animal>
<animal>
<category id="27">
<species>macropod</species>
<type>kangaroo</type>
<name>Bruce</name>
</category>
</animal>
<animal>
<category id="28">
<species>diprotodon</species>
<type>wombat</type>
<name>Bruce</name>
</category>
</animal>
<animal>
<category id="31">
<species>macropod</species>
<type>wallaby</type>
<name>Bruce</name>
</category>
</animal>
<animal>
<category id="21">
<species>dromaius</species>
<type>emu</type>
<name>Bruce</name>
</category>
</animal>
<animal>
<category id="22">
<species>Apteryx</species>
<type>kiwi</type>
<name>Troy</name>
</category>
</animal>
<animal>
<category id="23">
<species>kingfisher</species>
<type>kookaburra</type>
<name>Bruce</name>
</category>
</animal>
<animal>
<category id="48">
<species>monotremes</species>
<type>platypus</type>
<name>Bruce</name>
</category>
</animal>
<animal>
<category id="4">
<species>arachnid</species>
<type>funnel web</type>
<name>Bruce</name>
<legs>8</legs>
</category>
</animal>
</document>
XML;
/*** a new simpleXML iterator object ***/
try {
/*** a new simple xml iterator ***/
$it = simplexml_load_string($xmlstring, 'SimpleXMLIterator');
/*** a new limitIterator object ***/
foreach(new RecursiveIteratorIterator($it, 1) as $name => $data)
{
echo $name.' -- '.$data.'<br />';
}
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>
SimpleXMLIterator
<?php
$xmlstring =<<<XML
<?xml version = "1.0" encoding="UTF-8" standalone="yes"?>
<document>
<animal>koala</animal>
<animal>kangaroo</animal>
<animal>wombat</animal>
<animal>wallaby</animal>
<animal>emu</animal>
<animal>kiwi</animal>
<animal>kookaburra</animal>
<animal>platypus</animal>
<animal>funnel web</animal>
</document>
XML;
try {
/*** a new simpleXML iterator object ***/
$sxi = new SimpleXMLIterator($xmlstring);
/*** add an attribute with a namespace ***/
$sxi->addAttribute('id:att1', 'good things', 'urn::test-foo');
/*** add an attribute without a namespace ***/
$sxi->addAttribute('att2', 'no-ns');
echo htmlentities($sxi->saveXML());
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>
LimitIterator & ArrayIterator
<?php
/*** the offset value ***/
$offset = 3;
/*** the limit of records to show ***/
$limit = 2;
$array = array('koala', 'kangaroo', 'wombat', 'wallaby', 'emu', 'kiwi', 'kookaburra', 'platypus');
$it = new LimitIterator(new ArrayIterator($array), $offset, $limit);
foreach($it as $k=>$v)
{
echo $it->getPosition().'<br />';
}
?>
SPLFileObject
<?php
try{
// create a new spl file object from a file
$file = new SplFileObject("./test.log");
// check if for validity
while($file->valid())
{
// echo the current line
echo $file->current().'<br />';
// increment the iterator
$file->next();
}
}
catch (Exception $e)
{
echo $e->getMessage();
}
?>
分享到:
相关推荐
SPL(Standard PHP Library)是PHP 5.0引入的一个核心组成部分,它包含了一系列内置的类、接口和函数,旨在增强PHP的编程能力,提高代码的可读性和可维护性。SPL库特别关注于数据结构、迭代器、自动加载和接口等核心...
SPL(Standard PHP Library)是PHP的内建标准库,提供了许多实用的类和接口,用于常见的编程任务,如迭代器、数组对象、异常处理以及面向对象的设计模式实现。在PHP中,SPL库为开发者提供了更强大的工具来处理数据...
在STM32的开发过程中,用户可以选择使用标准库(Standard Peripheral Library, SPL)或者低层库(Low-Layer Library, LL库)。这两种库各有特点,适应不同的开发需求。 STM32的标准库SPL是早期广泛使用的库,它提供...
在PHP编程语言中,SPL(Standard PHP Library)是一组内置的扩展,提供了一系列的抽象类和接口,方便开发者处理常见的编程任务。本篇文章将详细讲解SPL中的接口,特别是与迭代、计数和观察者模式相关的接口。 1. ...
在PHP编程中,SPL(Standard PHP Library,标准PHP库)提供了一系列面向对象的接口和类,这些接口和类可用于处理数组、迭代器、文件系统等。本篇文章着重介绍SPL标准库中用于遍历目录和查找固定条件文件的方法,即...
。。。
主要介绍了PHP SPL标准库中的常用函数介绍,本文着重讲解了spl_autoload_extensions()、spl_autoload_register()、spl_autoload()三个函数,需要的朋友可以参考下
权威详细的PHP SPL (Standard PHP Library)学习手册,很好,很实用,很值得一看!
PHP SPL标准库提供了多种数据结构的实现,其中堆(Heap)是一种特殊的树形结构,主要用于实现优先队列。堆可以分为最大堆和最小堆,分别对应根节点优先级最高和最低的特殊二叉树结构。PHP SPL标准库中的堆通过...
SPL(Standard PHP Library)是PHP标准库的一部分,它提供了一组预定义的接口和类,旨在帮助开发者更高效地解决常见的编程问题。SPL的设计目的是为了提高代码的复用性、可维护性和性能。通过使用SPL,开发者可以利用...
PHP SPL标准库是PHP扩展库,提供了丰富的数据结构和迭代器实现,其中包括了PHP SPL标准库中数据结构栈(Stack)的实现。栈是一种后进先出(Last In, First Out,LIFO)的数据结构,它只允许在栈的同一端进行数据的...
主要介绍了PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例,本文讲解SplFileInfo用来获取文件详细信息、SplFileObject遍历、查找指定行、写入csv文件等内容,需要的朋友可以参考下
1. **SPL (Standard PHP Library)**:SPL是PHP的标准库,它提供了许多面向对象的编程功能,包括迭代器、比较器、数组对象、双端队列、堆栈等数据结构,以及异常处理和自定义迭代器接口。开发者可以利用这些工具提高...
PHP SPL标准库中提供了多种迭代器、数据结构和对象接口的实现,其中SplFixedArray是一个固定大小的数组对象,它比标准的PHP数组拥有更好的性能表现。在处理大量数据时,尤其是固定大小的数组操作时,使用...
请注意,SPL文件的格式并非公开标准,因此解析SPL文件可能需要对Windows打印机制有深入理解,或者使用已有的开源库,如`SnailDev.EmfParser`。使用开源库可以简化这个过程,但仍然需要理解其工作原理以便于问题排查...
在IT领域,SPL06通常指的是某种特定的编程语言、工具或库的功能部分。由于提供的信息有限,我们无法确定它的确切含义,但我们可以从一般的角度来探讨如何有效地使用一个名为"SPL06"的组件,并结合压缩包中的"spl06...