PHP Передача объекта через класс?

После реструктуризации всего моего макета класса у меня все еще возникают проблемы с использованием нескольких экземпляров класса.

class User { public $variable; public function getUser() { $this->variable = 'It works!'; return 'bob'; } } class Base {} class One extends Base { public function test() { print_r($User->variable); // Want it to print 'It works!' } } $User = new User(); $username = $User->getUser(); if($username === 'bob') { $One = new One(); $One->test(); // prints "Notice: Undefined property: One::$variable } 

Что делает вышеприведенный код: Класс User получает имя пользователя. Если имя пользователя – bob , оно создаст объект one и попытается напечатать переменную из класса User . В моем реальном коде User очень запутан, и передача кучу вещей с помощью __construct просто не то, что я ищу.

Я думаю, что решение ( именно поэтому я назвал этот вопрос таким ), чтобы создать новый класс User в классе Base но я просто не могу обернуть голову вокруг создания целого нового объекта и повторно инициировать все, чтобы получить имя пользователя.

Внесите свой экземпляр User :

 class One { private $user; public function __construct(User $user) { $this->user = $user; } public function test() { print_r($this->user->variable); } } $User = new User(); $One = new One($user); $One->test(); 

Это не имеет каких-либо неоправданных эффектов в отношении эффективности, поскольку экземпляр передается по ссылке, а не копируется.

Класс One не знает о переменной $User и поэтому не может получить к ней доступ.

Вы можете либо передать переменную классу в конструкторе, либо задать его после создания объекта класса.

 class One extends Base { protected $user; public function setUser(User $user) { $this->user = $user; } public function One(User $user) { $this->setUser($user); } public function test() { print_r($this->user->variable); } } 

Или (но, пожалуйста, не надо, это плохая практика) установите переменную $User в глобальную.

 global $User