>백엔드 개발 >PHP 문제 >PHP 배열의 객체에 액세스하는 방법

PHP 배열의 객체에 액세스하는 방법

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼원래의
2019-09-28 11:17:113318검색

PHP 배열의 객체에 액세스하는 방법

아무 처리 없이 객체를 배열로 접근하면 큰 에러가 발생합니다.

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 = [&#39;one&#39;=>1, &#39;two&#39;=>2, &#39;three&#39;=>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 = [&#39;one&#39;=>1, &#39;two&#39;=>2, &#39;three&#39;=>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 = [&#39;one&#39;=>1, &#39;two&#39;=>2, &#39;three&#39;=>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[&#39;one&#39;]);

객체 순회 방법

사실 객체는 아무런 처리 없이 순회가 가능하지만, public으로 정의된 속성인 visible 속성만 순회가 가능합니다. 더 제어 가능한 객체 탐색을 달성하기 위해 미리 정의된 또 다른 인터페이스 IteratorAggregate를 사용할 수 있습니다.

아아아아

위 내용은 PHP 배열의 객체에 액세스하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.