31
05月
2020
ArrayAccess 的作用是使得你的对象可以像数组一样可以被访问。
thinkphp/library/think/Config.php 文件
<?php namespace think; use Yaconf; class Config implements \ArrayAccess { ...... // ArrayAccess public function offsetSet($name, $value) { $this->set($name, $value); } public function offsetExists($name) { return $this->has($name); } public function offsetUnset($name) { $this->remove($name); } public function offsetGet($name) { return $this->get($name); } }
下面我们可以写一个例子
extends/ConfigObj.php
<?php class ConfigObj implements \ArrayAccess { private $config = [ 'name' => 'zwb', 'age' => '26' ]; /** * @inheritDoc * isset($config['xxx']) 对应调用offsetExists方法。 */ public function offsetExists($offset) { return isset($this->config[$offset]); } /** * @inheritDoc * $config['xxx'] 对应调用offsetGet方法。 */ public function offsetGet($offset) { return $this->config[$offset]??null; } /** * @inheritDoc * $config['xxx'] = 'yyy' 对应调用offsetSet方法。 */ public function offsetSet($offset, $value) { return $this->config[$offset] = $value; } /** * @inheritDoc * unset($config['xxx']) 对应调用offsetUnset方法。 */ public function offsetUnset($offset) { unset($this->config[$offset]); } }
application/index/controller/ArrayAccessTest.php
<?php namespace app\index\controller; class ArrayAccessTest { public function run() { $config = new \ConfigObj(); $config['other'] = "123"; // 对应调用offsetSet方法。 var_dump(isset($config['other'])); // 对应调用offsetExists方法。 echo "<br/>"; var_dump($config['other']); // 对应调用offsetGet方法。 echo "<br/>"; unset($config['other']); // 对应调用offsetGet方法。 var_dump($config['other']); } }
调试
php think run 浏览器访问:http://localhost:8000/index/ArrayAccessTest/run 输出: bool(true) string(3) "123" NULL