아무 처리 없이 객체를 배열로 접근하면 큰 에러가 발생합니다.
Fatal error: Uncaught Error: Cannot use object of type Test as array
물론 클래스를 일부 수정해도 여전히 배열처럼 액세스할 수 있습니다.
보호 개체 속성에 액세스하는 방법
형식 변환에 앞서 또 다른 질문을 살펴보겠습니다. 보호된 속성에 액세스하려고 하면 큰 오류가 발생합니다.
Fatal error: Uncaught Error: Cannot access private property Test::$container
보호속성을 얻을 수 없다는게 사실인가요? 물론 그렇지 않습니다. 보호된 속성을 얻으려면 __get이라는 마법 메서드를 사용할 수 있습니다.
관련 권장사항: "php array"
DEMO1
개인 속성 가져오기
<?php class Test { private $container = []; public function __construct() { $this->container = ['one'=>1, 'two'=>2, 'three'=>3]; } public function __get($name) { return property_exists($this, $name) ? $this->$name : null; } } $test = new Test(); var_dump($test->container);
DEMO2
개인 속성 아래 해당 키 이름의 키 값을 가져옵니다.
<?php class Test { private $container = []; public function __construct() { $this->container = ['one'=>1, 'two'=>2, 'three'=>3]; } public function __get($name) { return array_key_exists($name, $this->container) ? $this->container[$name] : null; } } $test = new Test(); var_dump($test->one);
객체를 배열로 액세스하는 방법
이를 달성하려면 사전 정의된 인터페이스에서 ArrayAccess 인터페이스를 사용해야 합니다. 인터페이스에는 구현해야 하는 추상 메서드가 4개 있습니다.
<?php class Test implements ArrayAccess { private $container = []; public function __construct() { $this->container = ['one'=>1, 'two'=>2, 'three'=>3]; } public function offsetExists($offset) { return isset($this->container[$offset]); } public function offsetGet($offset){ return isset($this->container[$offset]) ? $this->container[$offset] : null; } public function offsetSet($offset, $value) { if(is_null($offset)){ $this->container[] = $value; }else{ $this->container[$offset] = $value; } } public function offsetUnset($offset){ unset($this->container[$offset]); } } $test = new Test(); var_dump($test['one']);
객체 순회 방법
사실 객체는 아무런 처리 없이 순회가 가능하지만, public으로 정의된 속성인 visible 속성만 순회가 가능합니다. 더 제어 가능한 객체 탐색을 달성하기 위해 미리 정의된 또 다른 인터페이스 IteratorAggregate를 사용할 수 있습니다.
아아아아위 내용은 PHP 배열의 객체에 액세스하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!