Реализация MVC в PHP. Неправильные модели

268
05 февраля 2018, 06:12

При трудоустройстве, мне отправили тестовое задание(сделать CRUD систему для работы с профайлами). Для задания я решил реализовать MVC. Пару дней назад в код-ревью получил замечание: *Слабое знание и понимание ООП PHP. Сделаны модели, которые не совсем являются моделями. Они содержат методы по загрузке списка профайлов. При этом возвращают массив. * Меня интересует почему не понравились мои модели. И как реализовать правильно.

Users.php

<?php
class Users 
{
    /**
        * Берет информацию о пользователе
        * с указанным id
        * @return array
    */
    public static function getUserById($id) 
    {
        $id = intval($id);
        //Если id был передан делаем запрос к БД
        if ($id) 
        {
            $result = Db::$PDOobject->query('SELECT * FROM users 
            LEFT JOIN users_email ON users_email.user_id = users.id 
            LEFT JOIN users_home_number ON users_home_number.user_id = users.id 
            LEFT JOIN users_mobile_number ON users_mobile_number.user_id = users.id 
            LEFT JOIN users_work_number ON users_work_number.user_id = users.id
            WHERE users_email.user_id =' . $id);
            $result->setFetchMode(PDO::FETCH_ASSOC);
            $userItem = $result->fetch();
        }
        return $userItem;
    }
    /**
        * Берет информацию о всех 
        * пользователях
        * @return array
    */
    public static function getUserArray() 
    {
        $userArray = array();
        $result = Db::$PDOobject->query('SELECT * FROM users 
            LEFT JOIN users_email ON users_email.user_id = users.id 
            LEFT JOIN users_home_number ON users_home_number.user_id = users.id 
            LEFT JOIN users_mobile_number ON users_mobile_number.user_id = users.id 
            LEFT JOIN users_work_number ON users_work_number.user_id = users.id');
        $result->setFetchMode(PDO::FETCH_ASSOC);
        $i = 0; //Счетчик для цикла
        while($row = $result->fetch()) 
        {
            $userArray[$i]['user_id'] = $row['user_id'];
            $userArray[$i]['first_name'] = $row['first_name'];
            $userArray[$i]['last_name'] = $row['last_name'];
            $userArray[$i]['middle_name'] = $row['middle_name'];
            $userArray[$i]['email'] = $row['email'];
            $userArray[$i]['check_main_number'] = $row['check_main_number'];
            $userArray[$i]['mobile_number'] = $row['mobile_number'];
            $userArray[$i]['work_number'] = $row['work_number'];
            $userArray[$i]['home_number'] = $row['home_number'];
            $i++;
        } 
        return $userArray;
    }
}
Answer 1
  1. Статические методы. Зачем вам здесь статика? Здесь явно через создание объекта должно быть
  2. Никак не реализована передача соединения с БД, тут-то и видно что про паттерн DI вы не знаете и вообще нет конструктора классов, не понятно знаете вы что это или нет
  3. В запросе где выбирается конкретный id должен быть LIMIT 1
  4. По поводу массива не совсем понятно, может быть проверяющий хотел что бы объект вернулся

Пример стандартного CRUD http://www.codingcage.com/2015/04/php-pdo-crud-tutorial-using-oop-with.html

READ ALSO
if в одну строку php расшифровка

if в одну строку php расшифровка

в вп есть такая строка:

243
Laravel: сделать копию базы данных

Laravel: сделать копию базы данных

ЗдравствуйтеИмеется проект на Laravel 5

234
Выпадающий список в CakePHP?

Выпадающий список в CakePHP?

Не так давно начала работу с CakePHP, встал вопрос, как реализовать выдающий списокСмысл списка в том чтобы пользователь выбрал пункт, а в базу...

222