PHP 无法通过公共$this实例化新类 (PHP MVC)



page.php(示例控制器页面)作为http://page/view/ 打开

class page extends fwcontroller
{
    public function __construct()
    {
        parent::__construct();
    }
    public function view()
    {       
        $this->load->library("uri");  #DOESN'T WORK
        var_dump($this->load->library("uri"));  #DOESN'T WORK
    }
}   

fwcontroller.php(ControllerHook,(它在/fw/fwcontrollerphp上),我不想移动到另一个文件夹!)

class fwcontroller extends core
{
    public $load;
    public function __construct()
    {
        $this->load = new loader;
        var_dump($this->load->library("uri")); #OK
    }
}

loader.php(loader库,(位于/fw/loader.php上),我不想移动到另一个文件夹!)

class function loader
{
    public function library($url)
    {
        return $url;
    }
}

我不想通过$this->load->library("uri")在页面控制器上加载实例并返回"ok"。但是,如果我的实例像"$this->loader=new loader",但只在页面上有效。php而不是在fwcontroller.php上。

第一:请启用错误报告。你的语法太离谱了。

public function page extends fwcontroller

应为:

class page extends fwcontroller

public fwcontroller extends core

应为:

class fwcontroller extends core

public function loader

应为:

class loader

另一件事,最好做:

public function __construct(loader $loader) // or even better create a interface
{
    $this->load = $loader; // dependency injection is always better for among other thing testability
    var_dump($this->load->library("uri")); #OK
}

编辑

如何创建页面类的实例?

我猜你做的是:$instance = new page;而不是:$instance = new page();。因为它只是起作用。

class /* NOT public function */ page extends fwcontroller
{
    public function __construct() {
        parent::__construct();
    }
    public function view()
    {       
        $this->load->library("uri");  // should work now
        var_dump($this->load->library("uri")); // should work now
    }
}

(纠正其他未命中类型!)

并使用带有自动加载功能的命名空间(+依赖项注入:p)。

最新更新