2013-01-05 2 views
1

방법이 있으면 클래스에서 변수를 사용하도록 요청하고 싶습니다.이 변수는 선언되었습니다.클래스에 변수 가져 오기

예 :

이 코드는 통지를 생산
$foo = 'bar'; 
class foobar{ 
    function example(){ 
     echo "foo{$foo}"; 
    } 
} 
$foobar = new foobar; 
$foobar->example(); 

: 공지 사항 : 정의되지 않은 변수 : foo는 그것이 작동되도록하는 방법이 있나요? 아니면 몇 가지 해결 방법이 있습니까?

+1

예. 클래스에 속성을 만들고 앞서 언급 한 속성에 인수 (즉, 전달한 변수)를 설정하는 생성자를 작성하기 만하면됩니다. –

+0

http://stackoverflow.com/questions/2862399/php-access-class-inside-another-class –

답변

0

과 같이 호출 할 수있다. 당신은 같은 것을 할 수있는 :

$var = 'value'; 
class foobar { 
    private $classVar; 
    function __construct($param) { 
     $this->classVar = $param; 
    } 
} 

을 그리고이처럼 시작 :

$var = 'value'; 
$inst = new foobar($var); 

아니면 (I이 경우 권하고 싶지 않다)과 같은 것을 할 글로벌 변수를 사용할 수 있습니다 :

$var = 'value'; 
class foobar { 
    global $var; 
    function show() { 
     echo $var; 
    } 
} 

UPDATE : 해당 인스턴스가 구현을 통해 필요한 경우 다른 클래스 내에서 클래스를 사용하려면, 그것은 생성자에서 인스턴스화 할 수도 있고, 필요한 경우에만 인스턴스화 할 수있다.

는 생성자 안에 다른 클래스에 대한 참조를 만들 같은 것을 수행합니다

class class1 { 
    private $someVar; 

    function __construct() { 
     $this->someVar = 'success'; 
    } 

    function doStuff() { 
     return $this->someVar; 
    } 
} 

class class2 { 
    private $ref; 
    private $val; 
    function __construct() { 
     $this->ref = new class1(); 
     $this->val = $this->ref->doStuff(); 
     // $this->val now holds the value 'success' 
    } 
} 

$inst = new class2(); // upon calling this, the $val variable holds the value 'success' 

을 또는 필요로 할 때 당신은 지금처럼 만 호출 할 수 있습니다 :

class class1 { 
    private $someVar; 

    function __construct() { 
     $this->someVar = 'success'; 
    } 

    function doStuff() { 
     return $this->someVar; 
    } 
} 

class class2 { 
    private $ref; 
    private $val; 
    function __construct() { 
     // do something 
    } 
    function assign() { 
     $this->ref = new class1(); 
     $this->val = $this->ref->doStuff(); 
     // $this->val now holds the value 'success' 
    } 
} 

$inst = new class2(); // the $val variable holds no value yet 
$inst->assign(); // now $val holds 'success'; 

희망을하는 데 도움이 .

+0

나는이 답변에 대해 어떤 이유로 투표를했는지 알고 싶다. 나는이 작업을 수행하는 방법을 하나 이상 제시하고 코드의 절반만을 제공하는 대신 그것을 사용하는 방법을 시연했다.이 사이트의 일부 사람들은 나를 당황하게합니다. – SISYN

+0

답변 해 주셔서 감사합니다. 나는 그것을 가장 완벽하게 찾는다. –

+0

수락 해 주셔서 감사합니다! 왜이 사이트에있는 사람들이 아무 이유없이 다른 사람들을 왜 투표하지 않는지 모르겠다. 나는 단지 도우려고했다. 도움이 더 필요하시면 알려주세요. 기꺼이 도와 드리겠습니다. – SISYN

-2

+1

[왜'글로벌'이 나쁜가요?] (http://stackoverflow.com/questions/11923272/use- 11923384 # 11923384) – PeeHaa

+0

해당 힌트를 사용하여 내 대답을 업데이트했습니다. – Shehabix

+1

이 방법이 효과적이지만 특히 클래스에서 사용하는 경우 스타일이 좋지 않습니다. – Nic

4

당신은이 인수를 줄 수있는 다른 클래스에 넣어

class foobar{ 
    function example(){ 

     global $foo; 

     echo "foo{$foo}"; 
    } 
} 

** 그래도 더 추가하거나 사용하고있는 방법에 전달하는 것은 더 나은 너무 ** 당신의 생성자가있는 클래스

class foobar{  

    private $foo; 

    public function __construct($name) { 
     $this->foo = $name; 
    } 
} 

다음으로 사용하십시오.

또는 어떤 PeeHaa 의미는, 당신은 그것을 가져 오거나 글로벌 키워드를 사용하는 구문을 사용

function example($param){ 
    echo "foo{$param}"; 
} 

에 방법을 변경하고이

$foobar->example($foo); 
+0

이 방법을 사용하거나 필요로하는 방법에 직접 주입하십시오. – PeeHaa