我正在测试这个东西,我正在尝试加载一个类并像这样使用它:
$这 - >模型 - > 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';
}
}
?>
答案 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();