各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > PHP

php中ArrayAccess是什么?php中ArrayAccess的介绍(代码示例)

管理员 2023-09-05
PHP
131

php中ArrayAccess是什么?php中ArrayAccess的介绍(代码示例)

内容导读

收集整理的这篇技术教程文章主要介绍了php中ArrayAccess是什么?php中ArrayAccess的介绍(代码示例),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3203字,纯文字阅读大概需要5分钟

内容图文

本篇文章给大家带来的内容是关于php中ArrayAccess是什么?php中ArrayAccess的介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

php提供了6个常用的预定义接口,实现某些特定的能力。其中最最常用的就是 ArrayAccess 了,像 Laravel 这种流行的框架都用到了它。

ArrayAccess 是啥

如官方文档所述,它“提供像访问数组一样访问对象的能力的接口”。

它提供了4个接口

/** * Interface to provide accessing objects as arrays. * @link http://php.com/manual/en/class.arrayaccess.php */interface ArrayAccess {    /**     * Whether a offset exists     * @link http://php.com/manual/en/arrayaccess.offsetexists.php     * @param mixed $offset <p>     * An offset to check for.     * </p>     * @return boolean true on success or false on failure.     * </p>     * <p>     * The return value will be casted to boolean if non-boolean was returned.     * @since 5.0.0     */    public function offsetExists($offset);    /**     * Offset to retrieve     * @link http://php.com/manual/en/arrayaccess.offsetget.php     * @param mixed $offset <p>     * The offset to retrieve.     * </p>     * @return mixed Can return all value types.     * @since 5.0.0     */    public function offsetGet($offset);    /**     * Offset to set     * @link http://php.com/manual/en/arrayaccess.offsetset.php     * @param mixed $offset <p>     * The offset to assign the value to.     * </p>     * @param mixed $value <p>     * The value to set.     * </p>     * @return void     * @since 5.0.0     */    public function offsetSet($offset, $value);    /**     * Offset to unset     * @link http://php.com/manual/en/arrayaccess.offsetunset.php     * @param mixed $offset <p>     * The offset to unset.     * </p>     * @return void     * @since 5.0.0     */    public function offsetUnset($offset);}

我们实现这4个接口,依次对应数组的isset,读取,设置,unset操作。

有什么用

定义说的很明白啦,提供像访问数组一样访问对象的能力。用上了它,可以让一个类即可以支持对象引用,也支持数组引用。

代码实现示例

class Container implements ArrayAccess{    /**     * @var array 单例对象索引     */    private $instances = [];    /**     * @var array 可实例化对象定义索引     */    private $definitions = [];    public function offsetExists($offset)    {        return isset($this->definitions[$offset]);    }    public function offsetGet($offset)    {        if (isset($this->instances[$offset])) {            return $this->instances[$offset];        } elseif (isset($this->definitions[$offset])) {            return $this->make($offset);        }        throw new Exception('未提供对象定义');    }    public function offsetSet($offset, $value)    {        // ... 省略一些较验判断        $this->definitions[$offset] = $value;    }    public function offsetUnset($offset)    {        unset($this->definitions[$offset]);        unset($this->instances[$offset]);    }    private function make($offset)    {        $definition = $this->definitions[$offset];        if ($definition instanceof Closure) {            return $this->instances[$offset] = $definition();        }        if (is_object($definition)) {            return $this->instances[$offset] = $definition;        }        if (is_array($definition)) {            $class = $definition['class'];            $reflection = new ReflectionClass($class);            $dependencies = [];            // ... 省略反射的实现代码            $object = $reflection->newInstanceArgs($dependencies);            return $this->instances[$offset] = $object;        }        throw new Exception('对象定义不合法');    }}

使用示例

$container = new Container();$container['test'] = function () {  return 'this is a test';};var_dump(isset($container['test']));echo $container['test'];unset($container['test']);

以上就是php中ArrayAccess是什么?php中ArrayAccess的介绍(代码示例)的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的php中ArrayAccess是什么?php中ArrayAccess的介绍(代码示例)全部内容,希望文章能够帮你解决php中ArrayAccess是什么?php中ArrayAccess的介绍(代码示例)所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部