注册
登录

您现在的位置是:首页 > 学无止境

PHP SPL的使用

木木彡82 2015-10-28 10:52:45 1469人围观
转载自:http://my.oschina.net/kakoi/blog/522133

在许多框架和MVC中都能够看到PHP SPL的身影, PHP SPL 在很多实际应用都占了很大的比重
双向链表
$obj = new SplDoublyLinkedList();
$...

转载自:http://my.oschina.net/kakoi/blog/522133

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

双向链表

<?php
$obj = new SplDoublyLinkedList();
$obj->push(1);
$obj->push(2);
$obj->push(3);
$obj->unshift(10);   //unshifit 替换双向链表的首部
$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;

文章评论

  • 登录后评论

点击排行