2013-10-18 4 views
1

당신이 PHP5.4에 (new Object)->method()을 할 수 있다고 가정 + 나는이 작업을 수행 할 수없는 이유 궁금 해서요 :PHP 할당 반환 값

<?php 

class Item { 
    public $property = 'test'; 
} 

class Container 
{ 
    public function getItem() 
    { 
     return new Item(); 
    } 
} 

echo get_class(($object = (new Container())->getItem())); // returns Item 

// this comes up with error 
echo ($object = (new Container())->getItem())->property; 

코드의 마지막 줄 트리거 왜 PHP Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR)

편집 :

내 질문에 명확하게 답할 필요가있는 것처럼 보입니다. 내 질문과 관련이없는 답변을 볼 때 그렇습니다. 구문 오류를 없애는 방법을 묻지 않습니다. 내 질문은 : 이유식 ($object = (new Container())->getItem())에 대한 속성에 액세스 할 수 없는데 get_class()이 이것이 Item의 인스턴스라고 알려줍니다.

+0

을, 왜하고 싶은가 ? – HamZa

+0

그리고 이것에 대해서 :'echo (new Container()) -> getItem() -> property;'??? 아니면 당신의 요구와 함께 작동하게 만들 수 있습니다 :'echo $ property = (new Container()) -> getItem() -> property;' – shadyyx

+0

@HamZa 나는 싫어, 나는 왜 get_class가 나에게 Item 클래스의 객체가 있지만 해당 속성에 액세스 할 수 없습니다. –

답변

6

는 당신은 PHP 5.4에서 함수의 반환 값을 역 참조

할당하는 기능이 없기 때문에, 당신이없는 역 참조 할 수 있습니다 (I은 5.5에서 당신이 할 수있는 ['x','y','z'][$index] 같이 새로 생성 된 배열 반 참조 생각) 할 수 있습니다.

+0

더 자세한 정보를 제공해 주시겠습니까? [PHP 매뉴얼] (http://php.net/manual/en/language.operators.assignment.php)에 따르면 : _ 할당 표현식의 값은 할당 된 값입니다. 즉, "$ a = 3"의 값은 3입니다.'($ object = (new Container()) -> getItem())의 값은'$ object'와 같습니다. 이것은'get_class'가 말하는 것입니다. –

+2

Dereferencing은 특수 구문으로, ANY 코드가 실행되기 전에 구문 분석 단계에서 발생합니다. 해석기는 할당이 역 참조 될 수있는 것임을 "인식"할 수 없습니다. 이는 런타임에 발생하는 일들에 달려 있기 때문입니다. –

0

왜 확장 클래스를 사용하지 않습니까?

class Item { 
public $Val = "Testing"; 

} 

class Container extends Item { 

    public function getItem() 
    { 
     return new Item(); 
    } // This method is no longer needed 

} 


$Object = new Container(); 
echo $Object->Val; // Output of: Testing 

는 PHP4

Manual For Extends

부터 사용할 수있다 또는 당신은 OOP의 범위에서 개체 초기화하고자하는 경우 : 그것이 가능하더라도

Class Item { 
public $Val = "SomeString"; 
} 

class Container { 
public $Instance; 
public function __construct(){ 
    $this->Instance = new Item(); 
} 

} 
$Object = new Container(); 
echo $Object->Instance->Val;