PHP SPL的使用

WBOY
Release: 2016-06-20 12:45:42
Original
983 people have browsed it

在许多框架和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);
Copy after login

堆栈的使用

<?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位置),同时在堆栈删除该节点
Copy after login

队列

$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);
Copy after login

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();}
Copy after login

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
Copy after login

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);}
Copy after login

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();}
Copy after login

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 的值
Copy after login

打印对象的值

class Count implements Countable{    protected  $mycount = 4;    public function count(){        return $this->mycount;    }}$count  = new Count();echo count($count);
Copy after login

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";    }}
Copy after login

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;
Copy after login


Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!