包含在函数中后对象丢失

时间:2014-10-03 11:15:11

标签: php

我在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

1 个答案:

答案 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();