클래스 속성을 개체로 어떻게 선언합니까? 속성을 객체로 선언 하시겠습니까?
내가 시도 :public $objectname = new $Object();
그러나 그것은 작동하지 않았다. 또한, 왜 그렇게해야합니까?
개체를 인스턴스화하고 해당 멤버를 사용하는 것이 좋지 않습니까?
클래스 속성을 개체로 어떻게 선언합니까? 속성을 객체로 선언 하시겠습니까?
내가 시도 :public $objectname = new $Object();
그러나 그것은 작동하지 않았다. 또한, 왜 그렇게해야합니까?
개체를 인스턴스화하고 해당 멤버를 사용하는 것이 좋지 않습니까?
:
클래스 멤버 변수를 "속성"이라고합니다. "속성"또는 "필드"와 같은 다른 용어를 사용하여 참조 된 것을 볼 수도 있지만이 참조를 위해 "속성"을 사용합니다. 이들은 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로합니다. 그냥 일반적인 클래스의 인스턴스를 찾고 있다면
PHP는 클래스 멤버의 명시적인 타이핑을 지원하지 않습니다. 그래서 당신은 말할 수 없다 : 클래스 Object
이 존재하고 당신이 그것의 인스턴스를 원하는
public Object $objectname;
경우, 시도해보십시오 PHP manual on class properties (강조 광산)에서
public $objectname = new Object();
이렇게하면 "상수 식에 잘못된 연산이 포함되어 있습니다"라는 치명적인 오류가 발생합니다. – hassan
당신은 할 수 있습니다 :
$objectname = new stdClass;
나는 당신이 단지 $를 선언해야 할 것이다, 그래서 당신은 속성의 선언에서이 작업을 수행 할 수 있습니다 믿을 수 없어 objectname이며 생성자에서 새 stdClass로 설정합니다.
집계를 "종속성 주입"이라고도하며 Fabien Potencier는 여기에 대한 자습서가 있습니다. http://fabien.potencier.org/article/11/what-is-dependency-injection –