2010-02-04 6 views
14

클래스 속성을 개체로 어떻게 선언합니까? 속성을 객체로 선언 하시겠습니까?

내가 시도 :

public $objectname = new $Object(); 

그러나 그것은 작동하지 않았다. 또한, 왜 그렇게해야합니까?

개체를 인스턴스화하고 해당 멤버를 사용하는 것이 좋지 않습니까?

답변

24

:

클래스 멤버 변수를 "속성"이라고합니다. "속성"또는 "필드"와 같은 다른 용어를 사용하여 참조 된 것을 볼 수도 있지만이 참조를 위해 "속성"을 사용합니다. 이들은 public, protected 또는 private 키워드 중 하나를 사용하여 정의되고 일반 변수 선언이 뒤 따른다. 이 선언 에는 초기화가 포함될 수 있지만이 초기화는 상수 값이어야합니다. 즉, 컴파일시 평가가 가능해야하며 평가를 위해 런타임 정보에 의존해서는 안됩니다.

class Foo 
{ 
    protected $bar; 
    public function __construct() 
    { 
     $this->bar = new Bar; 
    } 
} 

inject 또는 그 생성자 (aggregation)

class Foo 
{ 
    protected $bar; 
    public function __construct(Bar $bar) 
    { 
     $this->bar = $bar; 
    } 
} 

세터 또는 주입을 사용 생성자 (composition) 내부를 생성 하나.

class Foo 
{ 
    protected $bar; 
    public function setBar(Bar $bar) 
    { 
     $this->bar = $bar 
    } 
} 

당신은 favor aggregation over composition로합니다. 그냥 일반적인 클래스의 인스턴스를 찾고 있다면

+2

집계를 "종속성 주입"이라고도하며 Fabien Potencier는 여기에 대한 자습서가 있습니다. http://fabien.potencier.org/article/11/what-is-dependency-injection –

1

PHP는 클래스 멤버의 명시적인 타이핑을 지원하지 않습니다. 그래서 당신은 말할 수 없다 : 클래스 Object이 존재하고 당신이 그것의 인스턴스를 원하는

public Object $objectname; 

경우, 시도해보십시오 PHP manual on class properties (강조 광산)에서

public $objectname = new Object(); 
+2

이렇게하면 "상수 식에 잘못된 연산이 포함되어 있습니다"라는 치명적인 오류가 발생합니다. – hassan

1

당신은 할 수 있습니다 :

$objectname = new stdClass; 

나는 당신이 단지 $를 선언해야 할 것이다, 그래서 당신은 속성의 선언에서이 작업을 수행 할 수 있습니다 믿을 수 없어 objectname이며 생성자에서 새 stdClass로 설정합니다.

관련 문제