1 и 3 являются целыми константами, поэтому Java выполняет целочисленное деление, результатом которого является 0. Если вы хотите написать двойные константы, вы должны написать 1.0
и 3.0
.
Во-первых, Вы делаете вполне прилично при хранении разделенных вещей. Это платит в будущем, не, сдаются - также.
Расположение базы данных (или даже сама база данных) не важно сущности MVC. Это, оказывается, реляционная база данных в большинстве случаев, однако MVC не требует его явно (можно использовать устройство хранения данных XML или некоторую сетку/облако также). То, что крайне важно для MVC, должно сохранить Модель разделенной от остальных, которых Вы сделали.
Ваше Представление также ясно разделяется от остальных. Так же к части M MVC, Представления могут не только представить HTML, но любой представимый текстом вывод (XML, XML+XSL, RSS, простой текст или даже электронные письма), Представления могут быть реализованы несколькими способами: PHP включает как Ваш, шаблоны (т.е. Присяжный острослов) или полностью оперенные объекты, сериализуемые для отправки текстовых сообщений. Я далек от оценки, какая стратегия является лучшей, это - вопрос отдельного стиля кодирования и проектных требований.
Ваш контроллер путает (это - больше Контроллера Страницы, чем Контроллер Приложения). Это, вероятно, происходит из-за того, что существует одна скрытая часть в архитектуре MVC. Это называют Фронтальным контроллером или Диспетчером. Это до Диспетчера, чтобы проанализировать вход, инстанцировать контроллера (как в Контроллере Приложения) и вызвать вызванный метод. Если Вы хотите продолжать идти с Вашей пользовательской реализацией MVC, я предлагаю Вас использующий некоторый распространенный способ передать Класс контроллера и имя метода в URL, т.е.
index.php/Movies/list
index.php/Movies/details/35
Затем в новом index.php Вы просто анализируете $ _SERVER ['PATH_INFO'], инстанцируете класса Movies
и назовите list
метод, т.е.
$args = explode('/', ltrim($_SERVER['PATH_INFO'], '/'));
$className = array_shift($args);
$method = array_shift($args);
require "$className.php";
call_user_func_array(array(new $className(), $method), $args);
Затем Вы просто перемещаете содержание if-else
блок к двум отдельным методам в классе Фильмов.
class Movies { // may extend generic Controller class if you wish
public function list() {
$movies = Movie::get_all();
include 'views/v_list.php';
}
public function details($movieId) {
$movie = new Movie($movieId);
if ($movie->id > 0) {
include 'views/v_movie.php';
} else {
echo "Movie Not Found";
}
}
Таким образом, у Вас может быть несколько контроллеров, каждый с несколькими действиями.
Заключительные комментарии.
На стороне базы данных было бы удобно использовать одну из существующих платформ ORM. Они сохранят Вас дни работы и будут, вероятно, работать лучше, чем уровень дб ручной работы. Я также предложил бы обработать инстанцирование экземпляра PDO, поскольку инстанцирующий PDO в каждом Объекте модели не самый чистый путь. Что-то как DBFactory::getConnection
сделал бы.
Можно считать возврат HTML вместо того, чтобы повторить его в контроллере. Это дает Вам гибкость решетки, если бы Вы хотите реализовать Фильтры Прерывания, которые перенесли бы контроллер, прервать его вывод и пред - или выполнить последующую обработку его. Супер удобно иметь фильтр, который присоединяет заголовок HTML и нижний колонтитул автоматически.
Создание пользовательской платформы является отличным развлечением и ценным образовательным опытом, однако я предложил бы использовать одну из существующих платформ для более серьезных задач.
Всего наилучшего.
Вы делаете хорошее, но у меня есть несколько предложений:
get_all () статическая функция должна быть в Образцовом классе (в Вашем случае Datatier), так, чтобы Вы не переписывали его для любой модели. Единственное изменение, которое необходимо внести в той функции, состоит в том, чтобы заменить строку:
$results = родитель:: get_all_from_database ('фильм');
с
$results = $this->get_all_from_database(get_class($this));
это предполагает, что название Ваших моделей должно соответствовать названиям Ваших таблиц в базе данных