2014-12-17 4 views
0

속성으로 사용되는 다른 클래스의 인스턴스가있는 클래스를 만들고 싶습니다. 다음과 같은 내용이 있습니다.다른 클래스의 속성으로 클래스 사용

class person 
{ 
    var $name; 
    var $address; 
} 

class business 
{ 
    var $owner = new person(); 
    var $type; 
} 

물론 이것은 효과가 없으며 몇 가지 변형을 시도했습니다. Google 검색에서 찾은 모든 것은 중첩 된 클래스 정의 (class a { class b{ } }) 만 참조합니다.

다른 클래스에 클래스 인스턴스를 넣을 수 있습니까? 그렇지 않은 경우 합리적인 해결 방법이 있습니까?

+2

그'business' 클래스 생성자에서'owner' 속성 값으로 –

+2

하지만'var'을 사용하지 않고 적절한 [visibility] (http://www.php.net/manual/en/language.oop5.visibility.php) 키워드를 사용하십시오. PHP4를 아직 사용하고 있지 않습니다. ? –

+0

저는 Mark Baker와 함께 여기 왜 비즈니스를 위해 사용할 수 없는지 설명합니다 :: $ owner 속성을 설정하는 __ construct()? 생성자에 해당 인격 인스턴스를 만들거나 생성자에 매개 변수로 전달할지 여부 – qrazi

답변

1

수도있을 당신의 의도가 다른 클래스 메서드를 호출하는 경우 다음과 같이 사용해보십시오 : 당신은 당신의`person` 클래스의 인스턴스를 설정하고

class person 
{ 
    public $name; 
    public $address; 
} 

class business { 
public $owner; 
    function __construct($obj) { 
     $this->owner = $obj; 
    } 

} 
$a = new person(); 
$b = new business($a); 
+0

아마도 가장 좋은 답변 일 것입니다. 나는 이것과 비슷한 것을 사용할 것이다. 가장 큰 관심사는 애트리뷰트 $ a의 person 클래스 만 허용하는 것이 었습니다. 아마도 get_class() 함수를 사용하여 생성자에 전달 된 변수의 유효성을 테스트 할 것입니다. 감사! – Andrew

+1

@Andrew 또는 형식 힌트 사용 :'function __construct (person $ obj)'http://php.net/manual/en/language.oop5.typehinting.php 참조 – SirDarius

2
class person 
{ 
    public $name; 
    public $address; 
} 

class business 
{ 
    public $owner; 
    public $type; 

    public function __construct() 
    { 
     $this->owner = new person(); 
    } 
} 
2

클래스를 속성/속성/필드 선언의 일부로 초기화 할 수 없습니다.

From the PHP Property documentation :

[속성] 초기화를 포함 할 수 있지만,이 초기화는 상수 값이어야 선언 - 즉, 컴파일 시간에 평가 될 수 있어야하고 실행에 의존하지 않아야합니다 평가할 수있는 시간 정보. 당신은 클래스 인스턴스를 포함하는 속성을 가지고 새로운 인스턴스를해야하는 경우

, 당신은 생성자에서 할당해야합니다

class business { 
    public $owner; 

    public function __construct() { 
     $this->owner = new person(); 
    } 
} 
AS를

제쳐두고, visibility을 사용하십시오 var 대신 키워드 (public, protected, private)를 입력하십시오.

관련 문제