为什么没有加载php类

时间:2015-02-20 11:43:43

标签: php oop

我正在测试这个东西,我正在尝试加载一个类并像这样使用它:

  

$这 - >模型 - > model_name-> model_method();

这就是我所拥有的:

<?php
error_reporting(E_ALL);

class Loader {

    public function model($model)
    {
        require_once("models/" . $model . ".php");
        return $this->model->$model = new $model;
    }
}

class A {

    public $load;
    public $model;
    public $text;


    public function __construct()
    {
        $this->load = new Loader();
        $this->load->model('Test');
        $this->text = $this->model->Test->test_model();
    }

    public function get_text()
    {
        return $this->text;
    }

}


$text = new A();
echo $text->get_text();

?>

我在这里得到了一堆错误:

  

警告:从空值中创建默认对象   第9行的C:\ xampp \ htdocs \ fw \ A.class.php

     

注意:尝试获取非对象的属性   第24行的C:\ xampp \ htdocs \ fw \ A.class.php

     

致命错误:在非对象中调用成员函数test_model()   第24行的C:\ xampp \ htdocs \ fw \ A.class.php

我做错了什么?谢谢你的任何提示!

P.S。加载的文件中没有多少:

<?php

class Test {

    public function test_model()
    {
        return 'testmodel';
    }
}

?>

3 个答案:

答案 0 :(得分:0)

如果要在构造函数中避免使用$this->model = $this->load->model('Test'),请尝试以下代码(UPDATED)。

您只需调用$this->loadModel(MODEL)函数

即可加载模型
 <?php
error_reporting(E_ALL);

class Loader {
    private $models = null;
    public function model($model)
    {
        require_once("models/" . $model . ".php");
        if(is_null($this->models)){
            $this->models = new stdClass();
        }
        $this->models->$model =  new $model();
        return $this->models;
    }
}

class A{

    public $load;
    public $model;
    public $text;


    public function __construct()
    {
        $this->load = new Loader();
        $this->loadModel('Test');
        $this->loadModel('Test2');
        $this->text = $this->model->Test2->test_model();
    }

    public function get_text()
    {
        return $this->text;
    }


    private function loadModel($class){

        $this->model =  $this->load->model($class);
    }

}


$text = new A();
echo $text->get_text();

?>

答案 1 :(得分:0)

在A班&#39;构造函数你没有分配&#34;加载&#34;模型到任何东西,然后你试图使用没有分配给它的$ model属性。

试试这个:

class A {

public $load;
public $model;
public $text;


public function __construct()
{
    $this->load = new Loader();
    $this->model = $this->load->model('Test');
    $this->text = $this->model->test_model();
}

(...)

答案 2 :(得分:0)

问题可能是您没有将Loader.model定义为对象,而是将其视为对象。

 class Loader {
    public $model = new stdClass();

    public function model($model)
    {
        require_once("models/" . $model . ".php");
        return $this->model->$model = new $model();
    }
}

如果你有这样的课程,你可以使用

$this->model->model_name->model_method();