ArrayAccess

一、ArrayAccess接口

  PHP提供了一个ArrayAccess接口,ArrayAccess 的作用是使得你的对象可以像数组一样可以被访问。应该说 ArrayAccess 在PHP5中才开始有的,PHP5中加入了很多新的特性,当然也使类的重载也加强了,PHP5 中添加了一系列接口,这些接口和实现的 Class 统称为 SPL。其在大部分的框架中都有所体现,也是我们生活中可能用到的比较多的一个接口。其主要是是需要我们实现5个方法,就可以使用了,这5个方法如下所示:

interface ArrayAccess 
{
    abstract public offsetExists ($offset)  //检查偏移位置是否存在
    abstract public offsetGet ($offset)     //获取一个偏移位置的值
    abstract public void offsetSet ($offset ,$value) //设置一个偏移位置的值
    abstract public void offsetUnset ($offset)       //复位一个偏移位置的值
}


二、具体事例

  我们在一个文件夹里面创建一个文件夹,名为config,这里我们假设这个文件夹存放的是配置文件。还有两个文件分别是config.php和access_test.php,其中,config.php是用来继承接口的,代码如下:

<?php
class Config implements \ArrayAccess{

    private $config = [];
    private static $_install;
    private $path;
    
    private function __construct(){
        $this->path = './config/'; //配置文件的路径
    }
    
    public static function getInstance(){
    
    if (!self::$_install instanceof Config) {
        self::$_install = new config();
    }
    
      return self::$_install;
        
    }
    
    //检查偏移位置是否存在
    public function offsetExists($offset){
        return isset($this->config[$offset]);
    }
    
    //获取一个偏移位置的值sss
    public function offsetGet($offset){
        if (empty($this->config[$offset])) {
            $this->config[$offset] = require $this->path.$offset.'.php';
        }
        return $this->config[$offset];
    }
    
    //设置一个偏移位置的值
    public function offsetSet($key,$value){
        throw new \Exception("不提供设置值");
    }
    
    // 复位一个偏移位置的值
    public function offsetUnset($offset){
        throw new \Exception("不提供删除设置");
    }
    
        private function __clone(){}
        
}


  然后我们在config文件夹里面随便写两个文件,当做是配置文件,这里我新建了一个test.php的文件,如下:

<?php
    return [
        'a' => 1,
        'b' => 2,
        'c' => [
            'd' => 3,
            'e' =>4,
        ],
    ];

  然后再建一个文件,名为name.php,其代码如下:

<?php

return [
    'name1' => '刘备',
    'name2' => '关羽',
    'name3' => '张飞',
];


  接下来呢,我们再新建一个文件,名为access_test.php的文件,这里在这里通过Config这个类来调用那两个配置文件里的信息,代码如下:

<?php

require './Config.php'; //引入Cnfig类

$config = Config::getInstance();

var_dump($config['test']['a']);  //使用test.php里面的信息
var_dump($config['test']['c']);  //使用test.php里面的信息
var_dump($config['name']['name1']);  //使用name.php里面的信息


/*
结果如下:
1
array (
  'd' => int 3
  'e' => int 4
)
'刘备'
*/

  其结果如下所示,自此,ArrayAccess的演示就到这里。


4 Comments

  1. 头像
    小粥 回复
    2018-07-25 14:55:42

    大神大神

  2. 头像
    天凌 回复
    2018-05-19 10:15:29

    挺不错的,学习啦

头像
QQ登录: