Я хочу создать приложение 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
)
Я не знаю, какой фреймворк 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')
];
Кажется, работает, когда я делаю это:
`
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);
}
}`