我在index.php($Manager
)中创建了一个新对象$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><br />
我尝试在index.php中使$Manager
成为全局,但无济于事。将global $Manager
添加到home
方法有效;但这不是我的选择解决方案(因为每种方法都需要它)
如何从函数中获取包含继续使用全局变量的内容,例如我的$Manager
?
答案 0 :(得分:0)
而不是使用全局变量使用依赖注入
//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();