2011-05-12 3 views
2

클래스의 속성을 객체로 설정할 수 있습니까?PHP 속성을 객체로 사용

처럼 : 생성자에서

class User { 

    public $x = ""; 
    public $y = new ErrorVO(); 
    public $w = new array(); 

} 

답변

6

, 예.

class User 
{ 
    public $x = ""; 
    public $y = null; 
    public $w = array(); 

    public function __construct() 
    { 
     $this->y = new ErrorVO(); 
    } 
} 

편집 KingCrunch 좋은 지적을했다 : 당신은하지 하드 코드 의존성을해야한다. 개체를 개체에 주입해야합니다 (Inversion of Control (IoC)).

class User 
{ 
    public $x = ""; 
    public $y = null; 
    public $w = array(); 

    public function __construct(ErrorVO $y) 
    { 
     $this->y = $y; 
    } 
} 

new User(new ErrorVD()); 
2

당신은 속성 선언에서 선언 할 수는 없지만, 당신은 array()new 키워드없이 public $w에서 인스턴스화 할 수 __construct() 생성자에서 그것들을 초기화 할 수 있습니다 public $w = array();

public function __construct() 
{ 
    $this->y = new ErrorVO(); 
} 
+0

감사합니다. 많은 도움이됩니다. =) – Gerep

2

예, 그것이 .

class B { 
    public $b; 
} 

$my_object = new B(); 
$my_object->b = (object)array(
    'property' => 'test', 
); 
echo $my_object->b->property; // should also show 'test' 
: 인스턴스 후

class A { 
    public $a; 
    public function __construct() { 
     $this->$a = (object)array(
      'property' => 'test', 
     ); 
    } 
} 

$my_object = new A(); 
echo $my_object->a->property; // should show 'test' 
  • : 인스턴스화하는 동안

    • :하지만이 예를 들어, 이상 (생성자) 클래스 인스턴스화하는 동안 수행 또는 수

      생성자 또는 다른 메서드 외부의 클래스 정의에서 직접 개체를 할당 할 수 없습니다. 스칼라 (예. 정수, 문자열 등). 주입이 검증 클래스를 유지하고 싶어 ErrorVO -implementation 매우 쉽게 교체 할 수 있습니다

      class A { 
          public $a; 
          public function __construct (ErrorVO $a) { 
          $this->a = $a; 
          } 
      } 
      

      : 다른 사람이 이미 모든 것을 설명하는 경우에도 그냥 내 선호하는 솔루션

  • 6

    . 물론 당신은 하나의

    class A { 
        public $a; 
        public function __construct (ErrorVO $a = null) { 
        $this->a = is_null($a) ? new ErrorVO : $a; 
        } 
    } 
    

    마이너 업데이트로 두 솔루션을 결합 할 수 있습니다 : 그 동안 당신은 약간 더 작고 IMO는 의도는 더 명확하게있어이

    class A { 
        public $a; 
        public function __construct (ErrorVO $a = null) { 
        $this->a = $a ?: new ErrorVO; 
        } 
    } 
    

    같은 두 번째 예제를 작성할 수 있습니다. ?: -operator와 MySQL의 비교 COALESCE

    +0

    감사합니다. 도움이 될만한 질문입니다.) – Gerep

    +0

    좋은 예입니다. 매우 도움이됩니다. 고맙습니다. –

    관련 문제