Я просто не понимаю, почему я не могу вызвать такой объект.
<?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
находится в глобальной области действия и недоступен с учетом объема вашего класса.
Включите отчет об ошибках, и это сразу станет очевидным с ошибкой типа «попытка получить свойство не-объекта».