2012-12-28 2 views
2

나는 왜 내가 이처럼 객체를 부를 수 없는지 이해하지 못한다. 왜 다른 개체를로드 할 수 없습니까?

<?php 

$obj = (object) array (
     "happy" => " :) ", 
     "sad" => " :(" 
); 

class MyClass 
{ 
    function __construct() {} 

    function something() 
    { 
     echo "Hello World\n"; 
     echo $obj->sad; 
    } 
} 

$class = new MyClass(); 
echo $obj->happy; 
$class->something(); 

출력

:) Hello World 

처럼 보일 그리고 내가 기대하지 않습니다. 즉

:) Hello World :(

어떻게하면됩니까 ??

편집 : 이 예제에서는이 예제를 구현합니다. passing objects from the global scope to a model

+0

의 전원을 켜고 $ OBJ와 같은 $ this-> OBJ에 액세스해야합니다하기 가변 범위. 'something()'은'$ obj'를 볼 수 없습니다. – DCoder

+0

@DCoder 문제는 오류가 아닙니다. MyClass 내의 모든 함수에서 $ obj를 볼 수있게하려고합니다. – Matias

답변

2
<?php 

$obj = (object) array (
     "happy" => " :) ", 
     "sad" => " :(" 
); 

class MyClass 
{ 
    function __construct(){ 
    } 

    function something() 
    { 
     global $obj; 
     echo "Hello World\n"; 
     echo $obj->sad; 
    } 
} 

$class = new MyClass(); 
echo $obj->happy; 
$class->something(); 

?> 

그것을하는 방법할 : 생성자 또는 방법 자체가 하나의 매개 변수로서

+0

차가움. 그러나 MyClass의 각 함수 안에'global $ obj'를 선언해야합니다. 그리고 나는 클래스에 ~ 23 함수를 가지고있다 : P. 나는 그것이 단지 복사와 붙여 넣기 인 것을 안다. 모든 범위에서 $ obj를 볼 수있는 다른 방법은 없습니까? – Matias

+0

옙 .. 편집 – geekman

+0

을 보시다시피 모든 기능을 변경해야합니다 ... 출구가 없습니다. – geekman

4

$objsomething 기능의 범위 내에서 정의되지 않습니다. 함수 내에 global $obj을 추가하여 전역화할 수는 있지만 함수의 인수로 전달하는 것이 좋습니다.

편집 : 귀하의 경우 $obj는 전역 범위에 있고 클래스의 범위 withing에 사용할 수 없기 때문에

<?php 
$obj = (object) Array(
    "happy" => " :) ", 
    "sad" => " :(" 
); 
class MyClass { 
    function something($obj) { 
    echo "Hello World\n".$obj->sad; 
    } 
} 
$class = new MyClass(); 
echo $obk->happy; 
$class->something($obj); 
+0

$ obj global이 모든 코드를 중단시킵니다./이미 시도했습니다. 편집 : 내부 기능? – Matias

+0

글로벌은 어떤 방식 으로든 안전하지 않으므로 항상 피해야합니다. –

+0

"인수 전달"옵션에 대한 코드가 추가되었습니다. –

0

때문이다.

오류보고를 켜면 "비 객체 유형의 속성을 얻으려고 시도하는 중"오류가 발생하는 즉시 알 수 있습니다.

<?php 

$obj = (object) array (
     "happy" => " :) ", 
     "sad" => " :(" 
); 

class MyClass 
{ 
    function __construct() {} 

    function something ($obj) 
    { 
     echo "Hello World\n"; 
     echo $obj->sad; 
    } 
} 

$class = new MyClass(); 
echo $obj->happy; 
$class->something($obj); 
1

패스 OBJ 여기 방법을 사용한 예이다. obj가 여기에 포함되지 않으면 전역으로 설정하거나 전달해야합니다.

패스는 생성자와 instance..as 여기

<?php 

$obj = (object) array (
     "happy" => " :) ", 
     "sad" => " :(" 
); 

class MyClass 
{ private $obj; 
    function __construct ($obj) { 
    $this->obj=$obj; 

    } 

    function something() 
    { 
     echo "Hello World\n"; 
     echo $this->obj->sad; 
    } 
} 

$class = new MyClass($obj); 
echo $obj->happy; 
$class->something(); 

를 저장하지만, 당신이 읽어, 모든 기능에서 에러 표시에

관련 문제