Функция transform
Функция transform принимает два параметра: значение
и замыкание для его преобразования. Если переданное значение
не равно null, то функция выполняет замыкание
и возвращает его результат. В противном случае возвращается
null. Это удобно для безопасной обработки данных,
которые могут отсутствовать.
Синтаксис
<?php
transform($value, callback);
?>
Пример
Давайте преобразуем строку в верхний регистр, если она существует:
<?php
$name = 'john';
$res = transform($name, function ($value) {
return strtoupper($value);
});
echo $res;
?>
Результат выполнения кода:
"JOHN"
Пример
Если переданное значение равно null, функция вернёт null:
<?php
$name = null;
$res = transform($name, function ($value) {
return strtoupper($value);
});
var_dump($res);
?>
Результат выполнения кода:
"NULL"
Пример
Давайте обработаем массив данных из запроса:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class UserController extends Controller
{
public function show(Request $request)
{
$user = $request->user();
$name = transform($user, function ($value) {
return $value->name;
});
return view('profile', ['name' => $name]);
}
}
?>
В этом примере если пользователь авторизован, то мы получим его имя.
Если пользователь не авторизован, переменная $name будет равна null.
Пример
Функцию можно использовать для получения вложенных данных:
<?php
$data = [
'user' => [
'profile' => [
'age' => 25
]
]
];
$age = transform($data['user']['profile'] ?? null, function ($profile) {
return $profile['age'] ?? null;
});
echo $age;
?>
Результат выполнения кода:
"25"
Пример
Давайте преобразуем число в форматированную строку:
<?php
$number = 1234.56;
$res = transform($number, function ($value) {
return number_format($value, 2, '.', ',');
});
echo $res;
?>
Результат выполнения кода:
"1,234.56"
Пример
Функцию можно использовать для безопасного преобразования значений из коллекции:
<?php
use IlluminateSupportCollection;
$users = new Collection([
['name' => 'john', 'age' => 25],
['name' => 'jane', 'age' => null],
['name' => 'bob', 'age' => 30]
]);
$names = $users->map(function ($user) {
return transform($user['name'], function ($value) {
return ucfirst($value);
});
});
print_r($names->toArray());
?>
Результат выполнения кода:
["John", "Jane", "Bob"]