Ответы пользователя по тегу PHP
  • Как реализовать это на PHP?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    experience = 4 + level * 4
    Ответ написан
    Комментировать
  • Можно ли разместить анонимную функцию в тернарном операторе?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Можно, вопрос зачем.

    Для того что бы ваш код работал как ожидалось - надо вызвать функцию. Смысла в этом не особо много конечно, да и работать без временных переменных это будет только в PHP7, но...

    В целом так лучше просто не делать.
    Ответ написан
    Комментировать
  • MVC, правильно ли таким образом инклюдить модель и view в контроллер?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Дайте ссылку на "канонический" образец MVC


    MVC образца 1979-ого года (канонический) подразумевает то, что контроллер ничегошеньки не знает о view. Он ловит события с инпутов и конвертит асинхронные действия пользователей в вызовы методов модели. Имеется в виду модель нашей логики, модель приложения, не обязательно один класс но целая иерархия которая сама может включать сколько угодно слоев и иметь сколь угодно большую сложность. Контроллер детали реализации модели вообще не парит, инкапсуляцию для этого придумали.

    Так вот, View же напрямую подключается к модели и через обсервер подписывается на обновления состояния модели, и в случае оного актуализирует себя под текущее состояние.

    Ну это если мы говорим про олдскульный MVC который в чистом виде никто не применяет уже лет 15-20. Ну и на бэкэнде в этом нет особо смысла так как модель в рамках одного запроса-ответа поменяться дважды у нас не должна. Просто пробрасываем все необходимое текущее состояние во view и все хорошо.

    В целом у нас всеравно есть зависимость view от модели, что не ок. Потому чуваки придумали Model View Adapter (можно считать это вариацией MVP но есть нюансы).

    Суть такая. В качестве адаптера сделаем контроллер, который будет получать данные формата UI (HTTP запрос в нашем случае) и будет генерировать данные для UI (HTTP ответ опять же). То есть задача контроллера сводится всего-лишь к тому что бы получить запрос, дернуть метод модели (один в идеале) и сформировать ответ.

    Итог - полная независимость представления от модели и модели от представления. Конвертацией форматов орудует адаптер (в нашем случае это GRASP контроллер). Причем мы можем выстраивать целую цепочку адаптеров (концепция мидлвэров на этом строится), которую потом можно свести к одному главному фронт-контроллеру. Ну и подходит это не только для HTTP но и для всяких там MQ/CLI и других вариантов интерфейсов которые могут пригодиться в будущем (а могут и не пригодиться).

    В случае с рендрингом стоит вынести это добро в отдельный компонент, что бы в контроллере можно было бы это все сделать вызовом одного-двух методов.

    Ну и про буферизацию вывода не забываем.

    p.s. хватит писать велосипеды, вы всеравно из этого усвоите мало чего. Возьмите какой-нибудь микрофреймворк, что бы можно было и в нутрах покопаться, и бойлерплейт пописать, и на основе уже готового подумать почему там так сделано.
    Ответ написан
    Комментировать
  • Как правильно использовать функцию unserialize?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) достаем строку
    2) десериализуем в массив через unserialize
    3) ???
    4) профит

    images?q=tbn:ANd9GcQBCqwyKJ3ubE3LQRh3bJa
    Ответ написан
    3 комментария
  • Криптография, хэширование пароля password_hash?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Нужно и безопасно ли использовать password_hash для хэширования пароля?


    Да, нужно и это безопасно. Более того, не забываем проверять пароль через password_verify

    Разумно ли использовать PASSWORD_DEFAULT или лучше использовать свою соль (если соль, то разумно ли хранить свою соль для каждого пользователя в бд ? - или как это делается?)


    Разумно, потому что большинство разработчиков не сильно замарачиваются с генерацией соли. По поводу хранения в БД - она хранится прямо в строке, выдаваемой после хэширования пароля, если что. Не парьтесь по этому поводу. Суть соли в увеличении времени подбора пароля. Точно так же как и использование медленных алгоритмов типа bcrypt.

    Ведь php постоянно расширяется, все меняется, вскоре может изменится все и появится ещё более лучший механизм для хеширования


    PHP можно считать достаточно взрослым языком, там очень строго с обратной совместимостью. Ну и да - механизмы хэширования лучше не придумают, могут придумать лучше алгоритм (например сейчас повсеместно используется bcrypt, в том числе в php по умолчанию, но уже есть scrypt который лучше, но который еще не прошел проверку временем).

    Или как вариант, изменить вообще метод хеширования


    Bcrypt должно хватать. Для новых пользователей можно юзать уже другой метод, а старых просить сменить пароль. Куча разных стратегий.
    Ответ написан
    Комментировать
  • Как правильно передавать get-параметры и удобно работать с Url в js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    param[] - такие имена параметров не поддерживают


    Ну потому что это невалидная штука. Она работает только в PHP и больше нигде. Вместо этого следует использовать разделитель

    /cat/?param=102,105,204&view=1
    Ответ написан
  • Что все-таки должен уметь делать frond-end-разработчик?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Все то что запускается в браузере - ваша зона ответственности. Ajax (ajax это просто возможность делать http запросы из js), все эти фреймворки и библиотеки, все все все. От бэкэнда вас целиком и полностью отделяет весьма жирная сетевая прослойка. Причем эту прослойку вы так же должны знать как слой интеграции между фронтэндом и бэкэндом (на поверхносном уровне хотя бы).

    По сути сегодня фронтэнд и бэкэнд - отдельные приложения. SPA например - полностью независимое приложение, далее могут быть различные оптимизации и т.д. с сервер сайд пререндрингом где связанность повышается и четко границу ответственности уже не определить (хотя опять же можно). Ну и классический web как ярный пример каши.

    Если фронтэнд - это отдельное приложение, то и знать вы должны все что нужно для его построения. Это и архитектурные штуки (MVC/MVA/MVVM/MVP/Flux/паттерны всякие/функциональное программирование) и тесты писать уметь должны и т.д. Все как у бэкэндщиков по объемам знаний. Просто у бэкэндщиков геморой обычно в конкурентных запросах, локах, базах данных и другими веселыми штуками. а у фронтэндщиков - зоопарк браузеров, различия в окружениях и т.д.

    nodejs - это уже опционально. В любом случае если вы хорошо знаете JS то посмотреть как там чего в API ноды проблемы не составит (например что бы быстренько поднять expressjs сервачек для разработки с мидлвэрами, часто нужно для всяких webpack-ов и browsersync). Ну и опять же билд стэк у фронтэндщиков в принципе весь на ноде написан. Но это не бэкэнд.
    Ответ написан
    4 комментария
  • Как в foreach сделать счетчик?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    foreach(array_slice($divan['divan'], 0, 3) as $value) {
    }
    Ответ написан
    Комментировать
  • Автоматический импорт неймспейсов в шаблонах?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Используйте twig. напишите отдельный экстеншен для него и сделайте кастомные функции. Хоть немного упростите себе жизнь и хоть чуть чуть уменьшите вероятность XSS.
    Ответ написан
    Комментировать
  • Зачем нужны абстрактные классы (PHP)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    типичный юзкейс для абстрактный классов - базовая реализация, уменьшение дублирования кода при появлении общего решения и т.д. Например у вас есть интерфейс с несколькими методами, и только 2-3 из них реализуются по разному. Выгодно вынести общую реализацию в базовый абстрактный класс.
    Ответ написан
    1 комментарий
  • Как преобразовать число 568be27e005bd6b61a8b4567?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ваша строка - число в 16-ти ричной системе счисления. Переводим в систему счисления с более высоким основанием (64 например) и радуемся.
    Ответ написан
    2 комментария
  • Как четко спроектировать БД?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    EAV

    Пляшем от 5-ой нормальной формы а дальше уже оптимизации по мере необходимости.
    Ответ написан
    Комментировать
  • Как отправить на серевер картинку, если она base64?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    что мы имеем - мы имеем картинку закодированную в base64. Что с ней делать? Логика подсказывает что мы должны сделать base64decode и сохранить этот кусок бинарных данных в файл (jpg/png - зависит от того во что этот плагин сохраняет).
    Ответ написан
    Комментировать
  • Vagrant: где должны лежать файлы моего сайта?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    официальная документация, раздел про sync folders.

    Пример: github.com/intellectsoft-uk/symfony-skeleton
    Ответ написан
    Комментировать
  • Бесконечная загрузка страницы websocket?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ммм... в том что это никакого отношения к websocket-s не имеет? В приведенном вами коде просто работа с TCP-стримами. Даже не сокетами (в общем-то разница не так уж велика, стримы просто абстракция сверху).
    Ответ написан
    Комментировать
  • Как повысить квалификацию php-программисту?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Сделаны даже не по MVC.

    Могу открыть страшную тайну - большинство людей так делают, даже если называют это MVC.

    думая только о логике приложения, а не вспоминая какие именно функции мне нужны.

    Ну так IDE за тем и нужны. Что бы не вспоминать какой порядок аргументов у той или иной функции, автокомплиты всякие и т.д. Даже люди, которые пользуются VIM и т.д. ставят себе сервера автокомплита и пользуются всем этим не потому что PhpStorm развращает, а потому что для них PhpStorm уже жмет (слишком умный, делает слишком много и от того медленно).

    Уверенные знания заключаются в понимании того, что вы делаете. Заучивать API глупо, сегодня оно одно - завра другое. Вам нужно только помнить что что-то такое есть и уметь составлять поисковые запросы. То чем вы пользуетесь каждый день и так в памяти отложится.
    Ответ написан
    Комментировать
  • Что быстрей file_get_contents | Sockets | cURL?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    разница в пределах погрешности, все три варианта используют сокеты так или иначе и упретесь вы I/O тех самых сокетов.
    Ответ написан
    1 комментарий
  • Как выбрать "правильный путь" в PHP?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    например mysql_query, который показывается как единственный вариант работы с БД в абсолютном большинстве учебников


    Старых учебниках. Очень старых учебниках. Открываем документацию по PHP и видим:

    This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include:
    mysqli_query()
    PDO::query()


    То есть поглядывайте в документацию к PHP (на мой взгляд у PHP одна из лучших документаций из всего что я читал и смотрел, глупо в нее не поглядывать)

    www.phptherightway.com (есть перевод на русский старой версии, он обновляется но лучше почитать оригинал).
    Ответ написан
    7 комментариев