首页 > 后端开发 > php教程 > PHP SPL的使用

PHP SPL的使用

WBOY
发布: 2016-06-20 12:45:42
原创
1002 人浏览过

在许多框架和MVC中都能够看到PHP SPL的身影, PHP SPL 在很多实际应用都占了很大的比重

双向链表

<?php$obj = new SplDoublyLinkedList();$obj->push(1);$obj->push(2);$obj->push(3);$obj->unshift(10);   //unshifit 占用了底部最后一个元素,把新的节点添加到了链表的底部(Bottom)$obj->rewind();     //  使用current 必须调用rewind,把节点指针指向bottom节点 $obj->next();    //    next 指向下一个节点$obj->prev();   // 指针指向上一个节点echo $obj->current();   //  指针指向当前结点if($obj->current()){    echo "y";}else{    echo "n";}    if($obj->valid()){        //如果当前节点是有效节点 valid则返回true    }$obj->pop();  //删除指针指向的当前结点    //var_dump($obj);print_r($obj);
登录后复制

堆栈的使用

<?php$stack = new SplStack();  //实例化堆栈$stack->push("a");        //向堆栈中加入数据$stack->push("b");$stack->push("c");/*$stack->offsetSet(0,'C');  //堆栈的节点0是top 的节点,设置节点的值$stack->rewind(); //双向链表的rewind和堆栈的rewind相反,堆栈的rewind使得当前指针指向TOP所在的位置,而双向链表调用之后指向bottom所在的位置echo "qq".$stack->next();  // 堆栈的next与双向链表相反echo "re".$stack->current()."</br>";//echo "bo".$stack->bottom()."</br>";//echo "top".$stack->top();print_r($stack);*///从TOP开始遍历$stack->rewind();while($stack->valid()){    echo $stack->key()."=>".$stack->current()."</br>";    $stack->next();}$pop = $stack->pop();echo $pop;//pop操作从堆栈里面提取出的最后一个元素(TOP位置),同时在堆栈删除该节点
登录后复制

队列

$que = new SplQueue();$que->enqueue("a");    //    入队列$que->enqueue("b");$que->enqueue("c");//print_r($que);echo "bottom".$que->bottom()."</br>";echo "top".$que->top();$que->rewind();  $que->dequeue();    //出队列//从 bottom 位置删除print_r($que);
登录后复制

ArrayIterator

<?php$fruits = array(    "apple"  => "apple value",    "orange" => "orange value",    "grape" => "grape value");                //定义一个水果数组$obj = new ArrayObject($fruits);$it = $obj->getIterator();    //  用foreach 实现遍历数组foreach($it as $key => $value){    echo $key."->".$value."</br>";}$it->rewind();  //必须要 rewind//用 while 来遍历数组while($it->valid()){    echo $it->key()."->".$it->current()."</br>";     $it->next();}//跳过某些元素进行打印$it->rewind();if($it->valid()){    $it->seek(1); //寻找到1的元素    while($it->valid()){        echo $it->key()."->".$it->current()."</br>";        $it->next();    }}echo "</br>";$it->rewind();//$it->ksort();  //进行排序  用key ,//$it->rewind();$it->asort(); //按value 进行排序while($it->valid()){    echo $it->key()."->".$it->current()."</br>";    $it->next();}
登录后复制

AppendIterator

<?php$array_a = new ArrayIterator(array('a','b','c'));  //定义两个 ArrayIterator$array_b = new ArrayIterator(array('d','e','f'));$it = new AppendIterator();$it->append($array_a);        //  将ArrayIterator追加到Iterator里$it->append($array_b);foreach($it as $key => $value){    echo $key."||".$value."</br>";}//通过APPEND方法把迭代器对象添加到AppendIterator对象中//把两个数组的 数值添加到一个Interator
登录后复制

MultipleIterator 将数组组合成整个输出

$idIter = new ArrayIterator(array('01','02','03'));$nameIter =  new ArrayIterator(array('qq','ss','show'));$mit = new MultipleIterator(MultipleIterator::MIT_KEYS_ASSOC);$mit->attachIterator($idIter,"id");$mit->attachIterator($nameIter,"name");foreach($mit as $value){    print_r($value);}
登录后复制

File文件,打印出当前文件夹文件的名称

date_default_timezone_get('PRC');$it = new FilesystemIterator('.');foreach($it as $value){    echo date("Y-m-d H:i:s",$value->getMtime())."</br>";    $value->isDir()?"<dir>":"";    number_format($value->getSize());    echo $value->getFileName();}
登录后复制

IteratorIterator

$array=array('value1','value2','value3','value4','value5');$out = new Outer(new ArrayIterator($array));foreach($out as $key => $value){    echo $key."||".$value."</br>";}    class Outer extends IteratorIterator{        public function current(){            return parent::current()."why";        }        public function key(){            return parent::current()."not";        }    }//可以定制key和value 的值
登录后复制

打印对象的值

class Count implements Countable{    protected  $mycount = 4;    public function count(){        return $this->mycount;    }}$count  = new Count();echo count($count);
登录后复制

autoload机制

spl_autoload_extensions('.class.php,.php'); //设定以什么扩展名结尾set_include_path(get_include_path().PATH_SEPARATOR."autoload/"); //设定文件的目录spl_autoload_register();new test();///spl_autoload_register('')可以自定义//比如我有一个文件在 文件夹 autoload下class test{    public function __construct(){        echo " this is test.class.php";    }}
登录后复制

SPLFILE //对文件的操作

date_default_timezone_set('PRC');$file = new SplFileInfo('qq.txt');echo "file is create at".date("Y-m-d H:i:s",$file->getCTime())."</br>";echo "file is modified at".date("Y-m-d H:i:s",$file->getMTime())."</br>";echo "file size".$file->getSize()."kb</br>";$fileObj = $file->openFile("r");while($fileObj->valid()){    echo $fileObj->fgets();}$fileObj = null;$file = null;
登录后复制


相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板