почему невозможно загрузить объект внутри другого?

Я просто не понимаю, почему я не могу вызвать такой объект.

<?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 :( 

как я могу сделать эту работу?

EDIT: Это то, что я буду использовать в этом примере. передача объектов из глобальной области в модель

 <?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(); ?> - <?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(); ?> 

Это будет способ сделать это. obj не входит в сферу действия здесь, вам нужно либо сделать его глобальным, либо передать его.

Передайте его конструктору и сохраните экземпляр .. здесь

 <?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(); 

Но вам придется получить доступ к $ obj как $ this-> obj из всех функций

$obj не определяется внутри области функции something . Вы можете глобализовать его, добавив global $obj функцию global $obj внутри функции, но лучше было бы передать ее в качестве аргумента функции.

РЕДАКТИРОВАТЬ:

 <?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); 

Передайте obj как параметр либо самому конструктору, либо самому методу, вот пример использования метода:

 <?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); 

Это связано с тем, что в вашем случае $obj находится в глобальной области действия и недоступен с учетом объема вашего класса.

Включите отчет об ошибках, и это сразу станет очевидным с ошибкой типа «попытка получить свойство не-объекта».