PHP: вызов конструктора моделей из контроллера

Я хочу создать приложение Todolist, используя шаблон mvc.

вот мой Todo.php :

`

class Todo {
public $id;
public $title;

public function init($id , $title){
$this->id = $id;
$this->title = $title;
var_dump($this);
}
}

И Controller.php:

`<?php

class Controller{

public function model($model, $params =[]){

if(file_exists('../app/models/'. $model . '.php')){
require_once '../app/models/'. $model . '.php';
return new $model();
}

throw new Exception("File ". $model ." does not exist", 1);
}

public function view($view, $data = []){
if(file_exists('../app/views/'. $view .'.php')){
if($data){
extract($data);
unset($data);
print_r($data);
}
var_dump($data);
require_once '../app/views/'. $view .'.php';
} else throw new Exception("File ". $view ." does not exist", 1);

}
}`

home.php который расширяет контроллер:

`<?php

class home extends Controller {

public function index(){

$todos = [
$this->model('Todo')->init(0 ,'make lunch'),
$this->model('Todo')->init(1 , 'do homework'),
$this->model('Todo')->init(2 , 'hang out with Kelly')
];

var_dump($todos);
$this->view('home/index', $todos);
}
}

теперь, когда я запускаю это, первый var_dump ($ this) в Todo.php выводит:

`object(Todo)#4 (2) { ["id"]=> int(0) ["title"]=> string(10) "make lunch" }`

в то время как var_dump($todos) в выходных данных home.php:
array(3) { [0]=> NULL [1]=> NULL [2]=> NULL }

Может кто-нибудь объяснить мне, почему массив пуст, даже если я заполнил его объектом Todo, который, кажется, работает нормально (через var_dump($this) в init() , в Todo.php )

1

Решение

Я не знаю, какой фреймворк mvc вы используете, но если вам нужен правильный новый объект, вы должны создать новый оператор, например: new objectName() ;,

в вашем случае что-то вроде ..

     $todos = [
new model('Todo')->init(0 ,'make lunch'),
new model('Todo')->init(1 , 'do homework'),
new model('Todo')->init(2 , 'hang out with Kelly')
];

или же

  $todos = [
new Todo()->init(0 ,'make lunch'),
new Todo()->init(1 , 'do homework'),
new Todo()->init(2 , 'hang out with Kelly')
];
0

Другие решения

Кажется, работает, когда я делаю это:
`

class home extends Controller {

public function index(){

$todos = [
$this->model('Todo'),
$this->model('Todo'),
$this->model('Todo')
];

$todos[0]->init(0 ,'make lunch');
$todos[1]->init(1 , 'do homework');
$todos[2]->init(2 , 'hang out with Kelly');

$this->view('home/index', $todos);
}
}`
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector