@Allexio
Программист-путешественник.

Попинайте. Работодатель сказал, что у меня код PHP устаревший. В чем именно проблемы?

Всем привет. Пытаюсь устроиться на работу, последние 10 лет программил для своих порталов, поэтому сильно с технологиями и подходами не заморачивался.

Сейчас пытаюсь устроиться на работу Php программистом. Работодатель попросил прислать код, отослал свой старый, отзыв такой получил:

"Есть несколько моментов которые неприемлемы, напр подавление ошибок, и вообще похож на Вордпресс 2 и тп.."

Класс можно здесь посмотреть: https://github.com/alex-verem/turcalendar-sample-code

Кстати, когда 10 лет назад начинал проект, то смотрел какой подход использовать. Не исключено что как раз WordPress разбирал..

Мои вопросы

1) Какие основные ошибки/недочеты в коде?
2) Какие сейчас стандарты? Какой проект/код посмотреть, чтобы понять современный подход? Вероятно предложите что-то из фреймворков. Мне желательно что-то попроще для начала.

Спасибо!
  • Вопрос задан
  • 2152 просмотра
Решения вопроса 2
Stalker_RED
@Stalker_RED
@mysql_query() уже одного этого кусочка хватает для того, чтобы сильно усомниться в скиллах.

Функция mysql_query устарела более семи лет назад, и в современных версиях языка ее вообще нет.
Подавление ошибок через @ - вообще шедевр. У вас, значит, запрос с ошибкой, или база упала - но ваш код это просто игнорирует и делает вид, что так и надо. Зашибись :)

Читайте https://phptherightway.com/
Ответ написан
Комментировать
Lillipup
@Lillipup
Allons-y, Алонсо!
Прочитай это и вопросы должны отпасть https://www.php-fig.org/psr/

Код и правда из 2007
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
FanatPHP
@FanatPHP
Чебуратор тега РНР
В общем да, на первый взгляд этот код производит ужасное впечатление
Тут даже не 2010-е, тут скорее 1990-е

По пунктам
- конструктор, совпадающий с именем класса, уже отсутствует в языке
- в конструктор передается бессмысленная переменная дб, которая нигде не используется
- функции вида formField() - это явно какой-то адок и инъекции
- про mysql_query уже сказали
- про собаку уже сказали. причём она здесь не нужна, mysql_query практически не выдаёт ошибок
- die ( mysql_error () ); - это вообще зашквар. Я кстати однажды наблюдал результат похожего кода на тостере много лет назад, хе-хе. На боевом сайте системные сообщения об ошибках никогда не должны выводиться в браузер. Вообще, это родовая ошибка похапешников, сохранившаяся до наших дней - у них все ошибки в обязательном порядке обрабатываются здесь и сейчас. В то время как код приложения должен только выбросить ошибку, а обрабатываться все ошибки должны централизованно, в другом месте.

Однако есть и хорошее.
Сам по себе класс неплохой, и довольно грамотный ООП в целом.
пожалуй, надо только подправить синтаксис, и задействовать какой-нибудь осмысленный объект $db, чтобы запрос выполнялся как-то так

function addPlace($place) {
    $query = "INSERT INTO place
        (name,english, countryID, globalRatingID, typeID, worldPartID, datecreated,
        datelastmodified,datepublished,permissionLevel,tansliterated)
        VALUES (
        (:name,:english, :countryID, :globalRatingID, :typeID, :worldPartID, now(),now(),
        now(),:permissionLevel,:tansliterated)";
    $this->db->query($query, [
        'name' => $place->getName(),
        'english' =>$place->getEnglish(),
        // и так далее, всё массивом
    ]);
    return true;
}
Ответ написан
@galliard
А я бы взял автора на работу. Да некоторые функции и конструкции синтаксиса устарели. Но при всех недочетах у его кода есть 2 весомых плюса:
1. В нем нет серьезных архитектурных ошибок. Ну разве что die посреди логики, но это легко лечится заменой на эксепшн.
2. Код понятный!!! Это вообще огромный плюс, который перекрывает все минусы.
Ответ написан
Комментировать
php666
@php666
PHP-макака
die ( mysql_error () );
последние 10 лет программил
на зоне программил с отсутствием интернета?

По факту отстал настолько, что можно смело искать другую работу. Точнее не отстал, а даже не вышел за пределы новичка.

Правда, ищи другую работу. Тебя просто порвут по скилам молодые мальчики.
Ответ написан
Комментировать
@ggrachdev
Используй пространства имен, вынеси классы в отдельные папки соответствующие их ответственности, почитай про PSR.
Почитай про SOLID.
Используй какой-нибудь фреймворк на MVC, подключи автозагрузчик классов, либо можешь без фрейморка самописку накатать с помощью библиотек типо https://github.com/klein/klein.php + шаблонизатор подключи + ORM для работы с бд, вынеси конфиг проекта в отдельный файл, выдели папку под тесты
Ответ написан
Alex_Wells
@Alex_Wells
PHP/Kotlin
Если вкратце, то этот код выкидывается и заменяется ORM'кой типа Cycle, Eloquent или Doctrine.

А так - больше нечего сказать, код херня по всем фронтам. Эксепшены, именование функций, типизация, автозагрузка - это все обязательно для современной разработки на PHP, и у тебя этого нет.
Ответ написан
daemonhk
@daemonhk
ПсиХоПат
Как по мне, главный минус - необходимость перечисления полей в классе! То есть нет какой-то условной "модели", которая содержала бы в себе поля и их типы, чтобы каждый раз не лезть в класс и не править код в 3 местах. К тому же я бы вынес запросы в какую-то общую функцию, которая занимается только запросами (извините за тавтологию).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы