2009-06-09 2 views
1

이 배열이 함수에 의해 반환 될 때 어떻게 배열에서 객체를 가져올 수 있습니까?PHP - 함수가 배열을 반환 할 때 배열에서 객체를 가져 오는 방법은 무엇입니까?

class Item { 
    private $contents = array('id' => 1); 

    public function getContents() { 
     return $contents; 
    } 
} 

$i = new Item(); 
$id = $i->getContents()['id']; // This is not valid? 

//I know this is possible, but I was looking for a 1 line method.. 
$contents = $i->getContents(); 
$id = $contents['id']; 
+2

참조 http://stackoverflow.com/questions/68711/php-can-i-reference-a-single-member-of-an-array-that-is-returned-by-a-function –

+0

' return $ this-> contents; ', 그렇습니까? – deceze

답변

4

두 줄 버전을 사용해야합니다. 코드를 스쿼시해야하는 강력한 이유가 없으면 이 아닌 중간 값을 가진이 없습니다.

그러나 두 줄에 그것을 유지

$id = array_pop($i->getContents()) 
+0

array_pop이 'id'를 출력해야한다는 것을 어떻게 알 수 있습니까? – Ropstah

+1

array_pop은 $ x [0] 또는 associative $ [ 'id']의 인덱스가 있는지 여부에 관계없이 배열의 첫 번째 요소를 반환합니다. 그것이 어떻게 작동하는지에 대한 더 많은 정보는 http://php.net/array_pop을보십시오. 이제 클래스가 private 변수 인 $ contents에 대한 더 많은 조작을 할 수 있다면 신뢰할 수는 없겠지 만 여기에있는 것을 기반으로 array_pop은 $ contents [ 'id']의 내용을 줄 것입니다. – artlung

+0

잘 클래스가 조금 더 큰 다음 표시 :). 나는 Item을 반환하는 Item ($ index) 함수를 생성하는 것을 끝내었다. $ i-> getContents() -> Item ('id'); – Ropstah

3

같은 것을 시도해 볼 수도 있습니다 - 다시 배열에 액세스해야하는 경우, 당신이 거기에있을 것이다. 그렇지 않으면 어쨌든 당신의 함수를 다시 호출하게 될 것입니다.

0

나는이 오래된 질문 알아요,하지만 내 하나 개의 라인 soulution은 다음과 같습니다

PHP> = 5.4 귀하의 soulution은 PHP> = 5.4

$id = $i->getContents()['id']; 
와 함께 작동합니다

PHP < 5.4 :

class Item 
{ 
    private $arrContents = array('id' => 1); 

    public function getContents() 
    { 
     return $this->arrContents; 
    } 

    public function getContent($strKey) 
    { 
     if (false === array_key_exists($strKey, $this->arrContents)) { 
      return null; // maybe throw an exception? 
     } 

     return $this->arrContents[$strKey]; 
    } 
} 

$objItem = new Item(); 
$intId = $objItem->getContent('id'); 

키로 값을 가져 오는 메소드를 작성하십시오.

감사합니다.

관련 문제