• Как исправить ошибку required parameter follows optional parameter?

    AleksandrB
    @AleksandrB
    Совсем недавно вывел "Hello world"
    Message: Required parameter $limit follows optional parameter $slug

    А перевести?

    Ошибка простая. Параметры в функциях могут принимать дефолтные значения, выглядит это вот так
    function getAnimations($slug = FALSE
    Но установленные значения по дефолту должны идти всегда после обязательных значений. В вашем случае необходимо сделать одну из 3-х вещей:
    Переместить параметр с дефолтным значением после обязательного параметра:
    public function getAnimations($limit, $slug = FALSE, $type = 3) {

    Убрать дефолтное значение (скорее всего вы его и так передаете)
    public function getAnimations($slug, $limit, $type = 3) {

    Установить дефолтное значение для limit
    public function getAnimations($slug = FALSE, $limit = 20, $type = 3) {
    Ответ написан
    2 комментария
  • В чем разница между dependency injection и методом, который возвращает тип класса?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В чем разница между поехать в отпуск и футболом?
    И в том и в другом случае мы будем носить обувь.
    Вот пример: в холодильник можно поставить пиво, а по карточке можно снять деньги в банкомате.

    Ты, во-первых, не понимаешь что такое dependency injection, а во-вторых - что делает твой код.

    Если отбросить все умные и красивые слова которые ты тут наскреб по сусекам, то оба твоих примера - про type hinting. Только в первом кусочеке кода мы просим интерпретатор проверять входящий параметр, а во втором - возвращаемое значение.
    Type hinting двольно размытый термин, мне больше нравится "контроль типов", который используется в документации. Поскльку в данном случае это не "подсказка", а строгий контроль: скрипт упадёт с ошибкой если в первом примере в метод придет что-то отличное от класса реализующего интерфейс Foo, а во втором - если метод вернет что-то отличное от такого класса.

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

    При этом dependency injection вообще не имеет никакого отношения ни к твоим примерам, ни к контролю типов. Внедрение зависимости относится к классам, а не методам. И означает, что если твой класс использует в работе какие-то инструменты, то он берет их не из воздуха - из всяких жлобал, синглетонов, контейнеров, или клепает прямо на месте - а явно получает при создании в виде параметров конструктора.
    Внедрение зависимостей следует использовать, чтобы твой код было легче изменять и поддерживать.
    Ответ написан
    6 комментариев