Объект, потерянный после включения в функцию

Я создаю новый объект $Manager в своем index.php($Manager = new Manager()). После этого я делаю некоторую маршрутизацию и т.д., Чтобы в конечном итоге оказаться в контроллере. Этот контроллер включает в себя выбор.

Теперь; Я хотел бы использовать $Manager в этом представлении, без необходимости назначать global $Manager в методе, который его включает.

Мой контроллер выглядит так: (раздели все остальные методы)

<!--?php
Class PostController extends Controller { public function home () { $items = $this--->getItems(); require_once(ROOT . 'application/items/post/home.view.php'); }
}
?>

В этом файле home.view.php я включаю view.view.php в цикл и делаю:

<!--?= $Manager--->currentPageItem(); ?>

но он дает ошибку:

<b>Notice</b>: Undefined variable: Manager in <b>C:\xampp\htdocs\blurp\application\items\post\view.view.php</b> on line <b>4</b>

Я попытался сделать $Manager глобальным в index.php, но безрезультатно. добавление global $Manager метода global $Manager в home метод; но это не мое решение выбора (так как каждый метод нуждается в этом)

Как я могу получить функции из функций, чтобы использовать глобальные переменные, такие как мой $Manager?

1 ответ

Вместо использования глобальных переменных используйте инъекцию зависимостей

//Your controller
class PostController extends Controller { public function home() { $items = $this->getItems(); require_once(ROOT . 'application/items/post/home.view.php'); }
}
//Somewhere in low end part of code
class Controller extends BaseClass {
}
abstract class BaseClass { public $manager; /** * Passing dependencies */ public function init(Manager $manager) { $this->manager = $manager; }
}
//Index, router, whatever
$controller = new PostController;
$controller->init(new Manager);
$controller->home();
//View
echo $this->manager->currentPageItem();

licensed under cc by-sa 3.0 with attribution.