Начиная с PHP 8.0 вы можете использовать именованные аргументы. Именованные аргументы позволяют передавать аргументы функции на основе имен параметров, а не позиций параметров.
В следующем примере определяется функция, которая находит позицию первого вхождения подстроки в строку:
<?php
function find($needle, $haystack)
{
return strpos($haystack, $needle);
}
Чтобы вызвать функцию find(), вы передаете аргументы на основе позиций параметров следующим образом:
find('awesome', 'PHP is awesome!');
В этом случае $needle - это "awesome", а $haystack - "PHP - is awesome!". Однако вызов функции не очевиден. Например, вы не знаете, какой аргумент - needle, а какой - $haystack.
Иногда вы можете случайно ошибиться, передав аргументы в неправильном порядке. Например:
find (
'PHP is awesome!',
'awesome'
);
Такие ошибки как правило тяжело обнаружить.
Чтобы избежать этого, вы можете добавлять комментарии к аргументам, например:
find (
'awesome', // needle
'PHP is awesome!' // haystack
);
Комментарий определенно делает код более понятным. Однако это ненадежно.
Чтобы улучшить это, PHP 8.0 представил именованные аргументы, которые позволяют вам указывать имена параметров при передаче аргументов:
find (
$needle = 'awesome',
$haystack = 'PHP is awesome!'
);
Поскольку вы используете имена параметров, позиции не важны. Например, вы можете поменять местами параметры следующим образом:
find(
$haystack = 'PHP is awesome!',
$needle = 'awesome'
);
Это будет работать правильно.
Пример определяет функцию, которая создает элемент привязки (<a>) из текста, href, заголовка и цели:
<?php
function create_anchor(
$text,
$href = '#',
$title = '',
$target = '_self'
) {
$a = '<a';
// add href attribute
if ($href) {
$a .= ' href="' . $href . '" ';
}
// add title attribute
if ($title) {
$a .= ' title="' . $title . '" ';
}
// add target attribute
if ($target) {
$a .= ' target="' . $target . '" ';
}
$a .= '>' . $text . '</a>';
return $a;
}
Чтобы создать ссылку с атрибутом target = _blank, вы должны указать все аргументы по умолчанию, пока не появится тот, который вы хотите изменить. Например:
$link = create_anchor(
'PHP Tutorial',
'https://it-junior.by/course/bazovyi-kurs-php',
'',
'_blank'
);
В этом примере вам нужно передать третий аргумент пробелом (' ').
Если вы используете именованные аргументы, вам не нужно указывать все значения по умолчанию. Например:
$link = create_anchor(
$text = 'PHP Tutorial',
$href = 'https://www.phptutorial.net/',
$target = '_blank'
);
PHP позволяет вызывать функцию, используя как позиционные аргументы, так и именованные аргументы. И вам нужно поместить именованные аргументы после позиционных аргументов. Например:
$link = create_anchor(
'PHP Tutorial',
'https://www.phptutorial.net/',
$target= '_blank'
);
Если поместить именованные аргументы перед позиционными аргументами, вы получите ошибку. Например:
create_anchor(
$target = '_blank',
'PHP Tutorial',
'https://www.phptutorial.net/'
);
Ошибка
Cannot use positional argument after named argument