2015-02-20 8 views
0

Im тестирование это вещь, где я пытаюсь загрузить класс и использовать его как это:почему класс PHP не загружается

$this->model->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(); 

?> 

Im получаю кучу ошибок здесь:

Warning: Creating default object from empty value in C:\xampp\htdocs\fw\A.class.php on line 9

Notice: Trying to get property of non-object in C:\xampp\htdocs\fw\A.class.php on line 24

Fatal error: Call to a member function test_model() on a non-object in C:\xampp\htdocs\fw\A.class.php on line 24

Что я делаю неправильно? Спасибо за любой отзыв!

P.S. не так много в загруженном файле:

<?php 

class Test { 

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

?> 
+0

Может вставить класс –

+0

теста, что происходит, если вы делаете var_dump ($ this-> load-> модель ('Test'));Выход; –

+0

объект (тест) # 5 (0) {} – gimcc

ответ

0

Try следующий код (ОБНОВЛЕНО), если вы хотите, чтобы избежать $this->model = $this->load->model('Test') в конструкторе.

Вы можете просто загрузить модели, вызвав $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(); 

?> 
+0

Привет, спасибо за ответ. Я могу сказать, что это решение работает, но это не для меня. Я специально хочу использовать модели в этом формате: $ this-> model-> model_name-> method_name(). – gimcc

+0

$ this-> model-> имя метода() не будет, если я хочу загрузить несколько моделей. – gimcc

+0

Проверьте обновленную версию, пожалуйста, –

0

В конструкторе класса вы не назначая „заряженную“ модель к чему-либо, а затем вы пытаетесь использовать свойство $ модели, которая ему ничего не присвоено.

Попробуйте это:

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(); 
} 

(...)

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(); 
+0

Да, это сработает, но я хотел бы добавить -> model-> after $ this. (так что это становится $ this-> model-> model_name-> model_method(). Я знаю, что это возможно, но, возможно, я делаю это неправильно. – gimcc

+0

ОБНОВЛЕНО, вам нужно инициализировать $ model -member –

+0

Хмм, ошибки – gimcc

Смежные вопросы