PHP SPL的使用
程序员文章站
2022-04-21 19:30:49
...
在许多框架和MVC中都能够看到PHP SPL的身影, PHP SPL 在很多实际应用都占了很大的比重
双向链表
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);
堆栈的使用
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()."";//echo "bo".$stack->bottom()."";//echo "top".$stack->top();print_r($stack);*///从TOP开始遍历$stack->rewind();while($stack->valid()){ echo $stack->key()."=>".$stack->current().""; $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()."";echo "top".$que->top();$que->rewind(); $que->dequeue(); //出队列//从 bottom 位置删除print_r($que);
ArrayIterator
"apple value", "orange" => "orange value", "grape" => "grape value"); //定义一个水果数组$obj = new ArrayObject($fruits);$it = $obj->getIterator(); // 用foreach 实现遍历数组foreach($it as $key => $value){ echo $key."->".$value."";}$it->rewind(); //必须要 rewind//用 while 来遍历数组while($it->valid()){ echo $it->key()."->".$it->current().""; $it->next();}//跳过某些元素进行打印$it->rewind();if($it->valid()){ $it->seek(1); //寻找到1的元素 while($it->valid()){ echo $it->key()."->".$it->current().""; $it->next(); }}echo "";$it->rewind();//$it->ksort(); //进行排序 用key ,//$it->rewind();$it->asort(); //按value 进行排序while($it->valid()){ echo $it->key()."->".$it->current().""; $it->next();}
AppendIterator
append($array_a); // 将ArrayIterator追加到Iterator里$it->append($array_b);foreach($it as $key => $value){ echo $key."||".$value."";}//通过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()).""; $value->isDir()?"":""; 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."";} 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())."";echo "file is modified at".date("Y-m-d H:i:s",$file->getMTime())."";echo "file size".$file->getSize()."kb";$fileObj = $file->openFile("r");while($fileObj->valid()){ echo $fileObj->fgets();}$fileObj = null;$file = null;
推荐阅读
-
监视磁盘使用情况的Shell脚本(本地+远程)
-
Oracle数据库的登陆、sqlplus的一些使用技巧以及Oracle中常用的知识讲解
-
优秀PHP程序员应具备的5大能力
-
9条建议让你的WordPress网站更快运行如飞,9条wordpress_PHP教程
-
PHP得到某段时间区间的时间戳 php定时任务
-
极客编程必备的五大PHP开发应用,必备五大php开发_PHP教程
-
php curl的几段小使用
-
PHP __autoload函数(自动载入类文件)的使用方法
-
昨天写支付接口时遇到支付接口返回数据接收地址,session数据丢失(或者说失效)的问题,session数据丢失_PHP教程
-
PHP的学习--解析URL,php--url_PHP教程