2010-12-05 7 views
10

그래서이 코드는 다음과 같습니다.PHP : 객체 변수를 만드는 법?

class Object{ 
    public $tedi; 
    public $bear; 
    ...some other code ... 
} 

이제이 클래스 내부에 공용 변수가 있음을 알 수 있습니다. 내가 뭘하고 싶은데요 동적 인 방법으로 이러한 변수를 만드는 것입니다 :

private function create_object_vars(){ 

    // The Array what contains the variables 
    $vars = array("tedi", "bear"); 

    foreach($vars as $var){ 
     // Push the variables to the Object as Public 
     public $this->$var; 
    } 
} 

그래서 어떻게 동적 인 방법으로 공용 변수를 만들어야합니까?

+0

질문은 무엇인가? –

+0

미안 해요 @ 페카, 분명하지만 마지막에 붙였습니다. – Adam

+0

호기심에서 벗어나고있는 이유는 무엇입니까? – aib

답변

7

예, 가능합니다.

당신은 꽤 많이 맞아요 -이 그것을 수행해야합니다 이것은 어떤 미친 위험한 일을 할 수 variable variable naming의 사용을 만드는 것을

private function create_object_vars(){ 

    // The Array of names of variables we want to create 
    $vars = array("tedi", "bear"); 

    foreach($vars as $var){ 
     // Push the variables to the Object as Public 
     $this->$var = "value to store"; 
    } 
} 

주의!

댓글에 따라 이와 같이 생성 된 멤버는 공개 될 것입니다. 보호 된/개인 변수를 만드는 방법이 있지만 확실하지는 않습니다 (예 : 확장의 C Zend API를 통해 할 수 있습니다.).

+0

정말? : D oh cool! – Adam

+0

하지만 스 니펫에는 공개가 없습니다. 기본값으로 공개 설정 되나요? – Adam

+0

@CIRK -이 방법으로 생성 된 멤버 변수는 기본적으로 public이 될 것입니다. (PHP 4의 모든 멤버는 공개되었습니다.) - 비공개 변수를 생성하는 간단한 방법이 있는지 확실하지 않습니다. –

5

ArrayObject에서 개체를 파생시킬 수도 있습니다. 따라서 배열 동작과 속성 삽입을 용이하게하는 몇 가지 메소드를 상속받습니다.

class YourObject extends ArrayObject { 

    function __construct() { 
     parent::__construct(array(), ArrayObject::PROPS_AS_ARRAY); 
    } 

    function create_object_vars() { 
     foreach ($vars as $var) { 

      $this[$var] = "some value"; 

     } 
    } 

속성은 다음 또는 사용 사례에 맞게 할 수있다하지 않을 수 있습니다 $this->var 마찬가지로 $this["var"]로 사용할 수 있습니다. 속성을 설정하는 대체 방법은 $this->offsetSet("VAR", "some value");입니다.

Btw, 가변 변수에 관해서는 아무 것도 없습니다. ArrayObject를 재사용하는 것처럼 적절한 언어 구조입니다.

31
$vars = (object)array("tedi"=>"bear"); 

또는

$vars = new StdClass(); 
$vars->tedi = "bear"; 
+0

오! 고맙습니다! StdClass 만 있으면됩니다. – zx1986

+0

@ bfg9k 나에게이 손길을 빌려주세요. http://stackoverflow.com/questions/42295574/how-to-convert-8209-array-object-variant-to-vt-variant –