zoukankan      html  css  js  c++  java
  • PHP SPL库

    SPL,PHP 标准库(Standard PHP Library) ,此从 PHP 5.0 起内置的组件和接口,并且从 PHP5.3 已逐渐的成熟。SPL 其实在所有的 PHP5 开发环境中被内置,同时无需任何设置。

    一.spl_autoload_register

    更加方便的惰性加载

    二.Iterator:迭代器

    迭代器是比较重要的一种设计模式.普遍用于数组遍历.php的Iterator接口,预定义了以下方法:

    Iterator extends Traversable {
    	/* 方法 */
    	abstract public mixed current ( void )
    	abstract public scalar key ( void )
    	abstract public void next ( void )
    	abstract public void rewind ( void )
    	abstract public boolean valid ( void )
    }
    

     

    任何类只要实现了该接口,则该类就可以迭代:
    示例代码:

    class Users implements Iterator
    {
        protected $position = 0;
        protected $storage = array();
    
        public function __construct()
        {
            $this->getWithData();
        }
    
        public function getWithData()
        {
            $this->storage[] = array(
                array('id' => 1, 'name' => 'john'),
                array('id' => 2, 'name' => 'jake')
            );
        }
    
        public function current()
        {
            return $this->storage[$this->position];
        }
    
        public function next()
        {
            $this->position ++;
        }
    
        public function key()
        {
            return $this->position;
        }
    
        public function valid()
        {
            return isset($this->storage[$this->position]);
        }
    
        public function rewind()
        {
            $this->position = 0;
        }
    
    }
    
    
    $users = new Users();
    foreach ($users as $key => $value) {
        echo $key;
        var_dump($value);
    }
    
    $users->rewind();
    
    // 或者
    while ($users->valid()) {
        $cur = $users->current();
        $users->next();
        var_dump($cur);
    }
    

      

    SPL内置的迭代器类,可以方便的实现一些功能,比如迭代一个文件夹:

    RecursiveIterator
    RecursiveIteratorIterator
    OuterIterator
    IteratorIterator
    FilterIterator
    RecursiveFilterIterator
    ParentIterator
    SeekableIterator
    LimitIterator
    GlobIterator
    CachingIterator
    RecursiveCachingIterator
    NoRewindIterator
    AppendIterator
    RecursiveIteratorIterator
    InfiniteIterator
    RegexIterator
    RecursiveRegexIterator
    EmptyIterator
    RecursiveTreeIterator
    ArrayIterator
    

      

    ps:
    注意区分ArrayIterator和ArrayAccess的区别;
    ArrayAccess:提供像访问数组一样访问对象的能力的接口

    三.ArrayAccess接口:

    ArrayAccess {
    /* 方法 */
    abstract public boolean offsetExists ( mixed $offset )
    abstract public mixed offsetGet ( mixed $offset )
    abstract public void offsetSet ( mixed $offset , mixed $value )
    abstract public void offsetUnset ( mixed $offset )
    }
    

      

    示例代码(结合单例模式):

    class Config implements ArrayAccess
    {
        private static $instance = null;
        private $configs;
    
        private function __construct()
        {
            $this->configs = array(
                'db_type' => 'mysql',
                'db_user' => 'root'
            );
        }
    
        public static function getInstance()
        {
            if (is_null(self::$instance)) {
                self::$instance = new Config();
            }
            return self::$instance;
        }
    
        public function offsetExists($offset)
        {
            return isset($this->configs[$offset]);
        }
    
        public function offsetGet($offset)
        {
            return $this->configs[$offset];
        }
    
        public function offsetSet($offset, $value)
        {
            $this->configs[$offset] = $value;
        }
    
        public function offsetUnset($offset)
        {
            unset($this->configs[$offset]);
        }
    
        public function __toString()
        {
            return (string)var_export($this->configs, true);
        }
    
        private function __clone()
        {
        }
    }
    
    $config = Config::getInstance();
    print $config['db_type'];
    print "
    ";
    $config['db_pwd'] = '1123';
    print $config;
    

      

    四.SplFixedArray

    SplFixedArray 实例化一个固定长度的数组.SplFixedArray数组相比标准的PHP数组更接近于C语言的数组,而且由于splFixedArray没有使用散列(Hash)存储方式,因此效率更高.

  • 相关阅读:
    Win10新建文件不自动刷新
    解决 Win10 系统新建文件夹后需手动刷新才能显示
    新建的文件需要刷新才能看见怎么办?
    win7、win10系统电脑开机后小键盘灯不亮怎么办?
    VMware Workstation 将虚拟机挂起后,电脑会很卡,SCSI转换成IDE就可以了
    如何把VMware Workstation使用的虚拟SCSI磁盘转换成虚拟IDE硬盘
    bat批处理文件怎么将路径添加到path环境变量中
    在Windows下使用svn命令行教程及svn命令行的解释
    php正确解码javascript中通过escape编码后的字符
    采集/自动登录啊都可以用这两个方法实现 asp.net
  • 原文地址:https://www.cnblogs.com/itfenqing/p/7727809.html
Copyright © 2011-2022 走看看