转载

【每日一博】PHP SPL 的使用

在许多框架和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;
正文到此结束
Loading...