qiuyimo / qiuyuhome.github.io

我的博客, 记录一些技术知识和问题的解决方法. 主要涉及到了 PHP, MySQL, Linux, JavaScript, HTML, Docker等等.
http://www.qiuyuhome.com
MIT License
1 stars 2 forks source link

[2018-04-07 15:12:21] PHP 中的接口 ArrayAccess 不理解 #14

Open qiuyimo opened 6 years ago

qiuyimo commented 6 years ago
<?php
/**
 * arrayaccess 官方接口测试.
 * User: qiuyu
 * Date: 2018/4/7
 * Time: 下午3:06
 */

namespace Test;

class Obj implements \ArrayAccess
{
    private $container = array();

    public function __construct()
    {
        $this->container = array(
            "one" => 1,
            "two" => 2,
            "three" => 3,
        );
    }

    public function offsetSet($offset, $value)
    {
        if (is_null($offset)) {
            $this->container[] = $value;
        } else {
            $this->container[$offset] = $value;
        }
    }

    public function offsetExists($offset)
    {
        return isset($this->container[$offset]);
    }

    public function offsetUnset($offset)
    {
        unset($this->container[$offset]);
    }

    public function offsetGet($offset)
    {
        return isset($this->container[$offset]) ? $this->container[$offset] : null;
    }
}

$obj = new Obj;

var_dump(isset($obj["two"]));
var_dump($obj["two"]);
unset($obj["two"]);
var_dump(isset($obj["two"]));
$obj["two"] = "A value";
var_dump($obj["two"]);
$obj[] = 'Append 1';
$obj[] = 'Append 2';
$obj[] = 'Append 3';
print_r($obj);

为什么会可以使用数组的形式调用?

qiuyimo commented 6 years ago

使用示例:

https://www.jianshu.com/p/de3cf01c3e11