Поэкспериментируйте с Laravel Helpers

задняя часть PHP Laravel Composer

При использовании функций Laravel мы не можем избежать использования различных глобальных функций, которые он предоставляет, также известных как вспомогательные функции.

Основное внимание уделяется обработке массивов, путей к файлам, маршрутов и строк.

Сегодня я в основном расскажу о нескольких часто используемых вспомогательных функциях, которые мне нравятся, а также о принципе реализации помощников Наконец, мы можем настроить наши собственные глобальные функции в соответствии с тыквой.

4 забавных вспомогательных функции

data_get()

The data_get function retrieves a value from a nested array or object using "dot" notation:

The data_get function also accepts a default value, which will be returned if the specified key is not found

Функция data_get() использует символ «.» для извлечения значений из вложенных массивов или объектов, где третий параметр должен установить значение по умолчанию, когда ключ извлечения не существует.

$array = ['albums' => ['rock' => ['count' => 75]]];

$count = data_get($array, 'albums.rock.count'); 
// 75

$avgCost = data_get($array, 'albums.rock.avg_cost', 0); 
// 0

$object->albums->rock->count = 75;

$count = data_get($object, 'albums.rock.count'); 
// 75

$avgCost = data_get($object, 'albums.rock.avg_cost', 0); 
// 0

В многоэтапном вложении не все значения ключа уровня одинаковы, одни и те же значения уровня для разных ключей могут использовать подстановочный знак (*), например:

$array = ['albums' => ['rock' => ['count' => 75], 'punk' => ['count' => 12]]];

$counts = data_get($array, 'albums.*.count');
// [75, 12]


$array = ['albums' => ['rock', 'punk' => ['count' => 12]]];

$counts = data_get($array, 'albums.*.count');
// [NULL, 12]

str_plural()

Для тех, кто плохо владеет английским языком, иногда вызывает шутку, как записать форму единственного числа во множественное число, но гораздо удобнее использовать метод str_plural(), где вторым параметром является значение, если оно больше 1, оно преобразуется во множественное число, в противном случае оно по-прежнему остается в единственном числе.

str_plural('dog'); // dogs
str_plural('cat'); // cats

str_plural('dog', 2); // dogs
str_plural('cat', 1); // cat

str_plural('child'); // children
str_plural('person'); // people
str_plural('fish'); // fish
str_plural('deer', 2); // deer

str_singular('children') // child

Существует также функция комплексного преобразования в единственное число: str_singular().

value() and with()

Функция value() возвращает данные в соответствии с входящим значением.Если функция закрытия передана, она запустит функцию закрытия напрямую и вернет результат:

$result = value(5);
// 5

$result = value(function () {
    return false;
});
// false

value() лично считает, что он больше используется в функциях более высокого порядка, а функция закрытия передается как значение функций более высокого порядка;

По сравнению с value() вы можете использовать функцию with() для передачи значений параметров:

$callback = function ($value) {
    return (is_numeric($value)) ? $value * 2 : 0;
};

$result = with(5, $callback);

// 10

$result = with(null, $callback);

// 0

$result = with(5, null);

// 5

tap()

<?php
function tap($value, $callback)
{
    $callback($value);
    return $value;
}

传入 value 值,并对 value 值进行操作,最后再返回 value。 tap 函数就好将 value 值进行镀金,修改 value 对象的状态和属性,最后返回结果可以进行后续操作。 как:

<?php
return tap($user)->update([
    'name' => $name,
    'age' => $age,
]);

Когда мы проходим модель пользователей $ в метод TAP, мы можем цепить все нужные функции. В нормальных обстоятельствах метод обновления возвращает логический тип, потому что мы используем функцию крана, метод обновления возвращает объект модели пользователя, вы можете продолжить цепочку Модель Метод для эксплуатации объекта модели пользователя.

разное

Дополнительные глобальные вспомогательные функции см. в разделе:Потяните Ravel.com/docs/5.6/… и…

Принцип реализации функции хелперов

Когда мы используем эти функции, первый вопрос, который приходит на ум:Laravel, как добиться?

Поэтому нам нужно начать с исходного кода Laravel Framework.

Когда PhpStorm IDE обращается к этим глобальным определениям функций, они находятся в основном в этих двух файлах:

"src/Illuminate/Foundation/helpers.php",
            
"src/Illuminate/Support/helpers.php"

Поскольку эти функции не определены в объекте, но для достижения цели глобальной загрузки Laravel загружает через автозагрузку Composer:

процитировано из:docs.PHP composer.com/04-schema Также…

Files

Если вы хотите явно указать, что определенные файлы должны загружаться при каждом запросе, вы можете использовать автозагрузку файлов. Обычно загружается как библиотека функций (не библиотека классов).

пример

{
    "autoload": {
        "files": ["src/MyLibrary/functions.php"]
    }
}

Далее Давайте посмотрим, как написано одна из функций:

if (! function_exists('tap')) {
    /**
     * Call the given Closure with the given value then return the value.
     *
     * @param  mixed  $value
     * @param  callable|null  $callback
     * @return mixed
     */
    function tap($value, $callback = null)
    {
        if (is_null($callback)) {
            return new HigherOrderTapProxy($value);
        }

        $callback($value);

        return $value;
    }
}

Как видно, каждая функция имеет такой формат:

if (! function_exists('xxx')) {
    function xxx() {
        // ...
    }
}

Примечание:Как видно из исходного кода функции tap, независимо от того, имеет ли входящая функция замыкания возвращаемое значение или нет, значение, возвращаемое функцией, равно $value, которое совпадает с входящим значением, так что "цепное программирование"Цель.

Пользовательские вспомогательные функции

Если вышеперечисленных функций помощников вам недостаточно, мы можем настроить функции помощников с помощью вышеуказанных методов в соответствии с нашими собственными потребностями разработки.

В основном это следующие шаги:

  1. Создайте файл helper.php в своем проекте
  2. Автозагрузка вспомогательных файлов в composer.json
  3. composer dump-autoload
  4. Напишите нашу глобальную функцию в файле helper.php
  5. test

Возьмите каштан 🔽

Суммировать

Изучение принципов реализации Лыравела помощников не только помогает нам понять и использовать эти помощники методы, но также помогает стандартизировать нашу логику кода и думать, изучая о том, как записана каждая функция HELPER. Узнайте, что это хорошо.

Ссылаться на:

  1. Потяните Ravel.com/docs/5.6/… и…
  2. Потяните Ravel-news.com/creating- и…