PHP代码无法按预期工作(类)

时间:2016-02-20 21:53:43

标签: php

这是我项目的主要类,我使用数组来存储类(不确定这是否是最好的方法),但是当使用下面的行...

$this->getController("config")->loadConfiguration();

它实际上没有加载配置?当我在$ this->类中访问它而不是getController函数时,它说它是空的?

我也得到这个错误..(编辑) 致命错误:在非对象上调用成员函数loadConfiguration()

这是我的全班:

<?php
defined("SECURE") or exit('Please define SECURE keyword to continue.');
class miracle
{
    //Usage: $this->getController("test")->run();

    private $classes;

    public function __construct()
    {
        $classes = array(); 
    }

    public function run()
    {
        $this->loadClasses();
        $this->getController("config")->loadConfiguration();
    }

    public function getController($c)
    {
        return $classes[$c];
    }

    private function loadClasses()
    {
        $this->classes["template"] = new template();
        $this->classes["config"] = new config();
    }
}
?>

4 个答案:

答案 0 :(得分:4)

__constructorgetController方法中出现错误:

[...]

private $classes;

public function __construct()
{
    $this->classes = array(); 
}

[...]

public function getController($c)
{
    return $this->classes[$c];
}

答案 1 :(得分:0)

你需要回复:

public function getController($c)
{
    return $this->classes[$c];
}

您也应该在构造函数中使用$ this-&gt;类。

答案 2 :(得分:0)

问题在于此代码

$this->classes["template"] = new template();
$this->classes["config"] = new config();

您正在尝试创建不存在的类的新对象。 你可以像这样使用stdClass

$this->classes["template"]= new stdClass();
$this->classes["template"]->name='template';

答案 3 :(得分:0)

快速查看代码,使用给定的行永远不会调用loadClasses()函数,假设之前没有调用过,则类永远不会加载到数组中。

尝试这样称呼:

$this->loadClasses()->getController("config")->loadConfiguration();

除此之外,你的函数getController()需要返回类范围的变量,如下所示:

    public function getController($c)
    {
        return $this->classes[$c];
    }

同样的改变也应该对你的类构造函数。

这一切都假设类templateconfig在项目的其他地方定义,包含在当前命名空间中,并且在当前命名空间中可用。