2022-11-28 23:56来源:m.sf1369.com作者:宇宇
$arr[]=$v 把 $v 这个东西 放到 $arr[] 这个数组中
一般来说,类似这种遍历输出所有文件,大多采用递归算法,这样程序显得比较简洁,其实际执行效率来说,并不见得比其他方法更好。
以下是示例:
function file_list($path)
{
if ($handle = opendir($path))//打开路径成功
{
while (false !== ($file = readdir($handle)))//循环读取目录中的文件名并赋值给$file
{
if ($file != . && $file != ..)//排除当前路径和前一路径
{
if (is_dir($path./.$file))
{
// echo $path.: .$file.
;//去掉此行显示的是所有的非目录文件
file_list($path./.$file);
}
else
{
echo $path.: .$file.
;
}
}
}
}
}
样品,spl是SAMPLE的缩写,通常指的是样品,有时也有成SMPL。
SPL有以下接口(10大接口)
1.ArrayAccess其功能是使类可以像PHP中的数组一样操作。有点类似于.net平台的index操作。
2.Traversable是Zend引擎的内置接口,它是能让类用于foreach语句的接口,但是在PHP中并不能直接实现Traversable。只能间接地通过Iterator或IteratorAggregate接口实现。
3.IteratorAggregate(继承Traversable,是他的儿子)是除Iterator之外另一个从Traversable接口中继承而来的。其接口也很简单,只有一个函数。就是返回一个迭代器实例。
4.Iterator(也是继承Traversable,是他的儿子),SPL中大部分接口和类都是从这个接口继承而来的。
5.RecursiveIterator(继承Iterator,为Traversable的孙子),递归迭代器,通过hasChildren()和getChildren()两个函数实现递归遍历子元素。
6.Countable这接口就一个count()函数,返回结果集的数量。实现这个接口的类可以用count()函数查询其结果集。
7.Serializable该接口实现序列化和反序列化的接口。在没有SPL之前,可以通过__sleep()和__wakeup()实现相同的功能,若同时实现了Serializable接口和_sleep()和__wakeup(),则只有Serializable接口的函数启作用。
8.SplObserverObserver观察者模式的中的观察者。
9.SplSubjectObserver观察者模式的中的发布者。
10.OuterIterator它的实现者可以包含一个或多个迭代器成员,即可以通过。