이 기사에서는 PHP의 ArrayAccess가 무엇인지 설명합니다. PHP의 ArrayAccess 소개(코드 예제)에는 특정 참조 값이 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
php는 특정 특정 기능을 구현하기 위해 일반적으로 사용되는 6가지 사전 정의된 인터페이스를 제공합니다. 가장 일반적으로 사용되는 것은 Laravel과 같은 널리 사용되는 프레임워크에서 사용되는 ArrayAccess입니다. ArrayAccess란 무엇입니까?
4개의 인터페이스를 제공합니다/**
* Interface to provide accessing objects as arrays.
* @link http://php.net/manual/en/class.arrayaccess.php
*/
interface ArrayAccess {
/**
* Whether a offset exists
* @link http://php.net/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.net/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.net/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.net/manual/en/arrayaccess.offsetunset.php
* @param mixed $offset <p>
* The offset to unset.
* </p>
* @return void
* @since 5.0.0
*/
public function offsetUnset($offset);
}
우리는 배열의 isset, read, set 및 unset 작업에 해당하는 이 4개의 인터페이스를 차례로 구현합니다.
정의는 매우 명확하며 배열 액세스와 같이 객체에 액세스하는 기능을 제공합니다. 이를 사용하면 클래스는 객체 참조와 배열 참조를 모두 지원할 수 있습니다.
코드 구현 예
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 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!