Вывести аргументы функции php

Вывести аргументы функции php

Передача аргументов пользовательским функциям

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

function funct ( $a , $b , /* . */ $z ) < . >;
?>

При вызове функции funct() нужно указать все передаваемые параметры, поскольку они являются обязательными. В PHP пользовательские функции могут обладать необязательными параметрами или параметрами по умолчанию, но об этом позже.

Передача аргументов по ссылке

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

Функции не могут изменить параметр-значение, то есть он доступен функции «только для чтения» — она может его использовать, но не более. В качестве параметра-значения необязательно указывать переменную, можно указать само значение, отсюда название — параметр-значение.

По умолчанию аргументы в функцию передаются по значению (это означает, что если вы измените значение аргумента внутри функции, то вне ее значение все равно останется прежним). Приведем пример:

function funct ( $string )
<
echo «

Параметр = $string

$str = 777 ;
funct ( 777 );
funct ( $str );

// Функция ‘funct’ выведет строку ‘Параметр = 777’ дважды

В отличие от параметров-значений, параметры-переменные могут быть изменены в процессе работы функции. Тут уже нельзя передавать значение, нужно обязательно передать переменную. В PHP для объявления параметров-переменных используется механизм передачи переменной по ссылке.

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

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

function funct (& $string )
<
$string .= ‘а эта внутри.’ ;
>
$str = ‘Эта строка за пределами функции, ‘ ;
funct ( $str );
echo $str ; // Выведет ‘Эта строка за пределами функции, а эта внутри.’
?>

Параметры по умолчанию

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

  • Параметров слишком много. При этом нет смысла каждый раз указывать все параметры;
  • Функции должны возвращать значения разных типов в зависимости от набора параметров.

В PHP функции могут возвращать любые значения в зависимости от переданных им параметров.

function makecup ( $type = «Чая» )
<
return «Сделайте чашечку $type.\n» ;
>
echo makecup ();
echo makecup ( «Кофе» );
?>

Результат работы приведенного скрипта будет таким:

Сделайте чашечку Чая
Сделайте чашечку Кофе

PHP также позволяет использовать массивы и специальный тип NULL в качестве значений по умолчанию, например:

function makecup ( $types = array( «Кофе» ), $Maker = NULL )
<
$device = is_null ( $Maker ) ? «сахаром» : $Maker ;
return «Сделайте чашечку » . join ( «, » , $types ). » с $device.\n» ;
>
echo makecup ();
echo makecup (array( «Кофе» , «Чая» ), «сливками» );
?>

Рассмотренный скрипт выведет следующее:

Сделайте чашкчку Кофе с сахаром . Сделайте чашечку Кофе, Чая с сливками.

Значение по умолчанию должно быть константным выражением.

Обратите внимание, что все аргументы, для которых установлены значения по умолчанию, должны находится правее аргументов, для которых значения по умолчанию не заданы, в противном случае ваш код может работать не так, как вы этого ожидаете. Рассмотрим следующий пример:

function makecup ( $type = «чая» , $cond )
<
return «Сделайте чашечку $type $cond.\n» ;
>

echo makecup ( «горячего» ); // Не будет работать так, как мы могли бы ожидать
?>

Результат работы приведенного выше скрипта будет примерно следующим:

Warning: Missing argument 2 for makecup() in c:\inetpub\php.su\test.php on line 2
Сделайте чашечку горячего .

Теперь видоизменим рассмотренный скрипт, исправив в нем ошибки:

function makecup ( $cond , $type = «чая» )
<
return «Сделайте чашечку $type $cond.\n» ;
>

echo makecup ( «горячего» ); // Теперь наш скрипт работает корректно!
?>

Результат работы исправленного скрипта будет выглядеть следующим образом:

Сделайте чашечку чая горячего.

Внимание! Начиная с PHP 5, значения по умолчанию могут быть переданны по ссылке!

Переменное число аргументов в функциях

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

Реализация этой возможности достаточно прозрачна и заключается в использовании функций func_num_args() , func_get_arg() и func_get_args() .

Рассмотрим возможности рассмотренных стандартных функций:

Стандартная функция func_num_args() возвращает колличество аргументов, переданных пользовательской функции:

function funct ()
<
$numargums = func_num_args ();
echo «Колличество аргументов : $numargums\n» ;
>

funct ( 1 , 2 , 3 ); // Скрипт выведет ‘Колличество аргументов: 3’
?>

Стандартная функция func_get_arg() возвращает элемент из списка переданных пользовательской функции аргументов:

function funct ()
<
$numargs = func_num_args ();
echo «Колличество аргументов: $numargs
\n» ;
if ( $numargs >= 2 ) <
echo «Второй аргумент : » . func_get_arg ( 1 ). «
\n» ;
>
>

Стандартная функция func_get_args() возвращает массив аргументов, переданных пользовательской функции:

function funct ()
<
$numargs = func_num_args ();
echo «Колличество аргументов : $numargs
\n» ;
if ( $numargs >= 2 ) <
echo «Второй аргумент: » . func_get_arg ( 1 ) . «
\n» ;
>
$arg_list = func_get_args ();
for ( $i = 0 ; $i $numargs ; $i ++) <
echo «Аргумент $i is: » . $arg_list [ $i ] . «
\n» ;
>
>

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

Источник

Функции в PHP

Если говорить простым языком, то функция — это блок кода, который может быть именован и вызван повторно. Иногда функцию ещё называют подпрограммой. Мы привыкли, что обычной переменной можно присвоить число, строку или массив, а затем получить его обратно, обратившись к значению по имени переменной. Функции устроены похожим образом. Это тоже своего рода переменная, только вместо строки или числа в ней хранится блок кода, который вызывается при использовании этой «переменной».

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

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

Разделяют два типа функций — встроенные и пользовательские.

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

Одна из таких, уже очень хорошо знакомых нам функций — это функция, которая выводит переданный ей текст на экран — print()

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

Анатомия функций

Как и с обычными переменными, работа с функциями состоит из их объявления и использования.
Перед тем, как использовать новую функцию, следует её объявить:

Пояснить все составные части функции проще всего на примере.
Допустим, на своём сайте мы хотим показывать, является ли выбранный пользователем год високосным. Для этого напишем функцию, в которую передаётся год. В результате работы функции мы хотим получить значение «истина», если год високосный, и «ложь» — если нет.
Определение такой функции:

Пример использования функции:

Потренироваться использовать функции в PHP можно в этом тренажёре.

Аргументы функции и область видимости

Наша функция умеет вычислять, является ли переданный год високосным.
Важно понимать, что функция — это как бы программа в программе. Это значит, что внутри такой функции не будут доступны переменные, которые определялись за её пределами. Чтобы передать внутрь функции информацию извне, нужно использовать аргументы функции.

Аргументы функции — это переменные, которые функция может получить из внешнего кода. В примере с is_leap_year такая переменная была только одна — $year .

Аргументы необходимы, так как функция «не видит» переменные, определённые за её границами. Поэтому нужные переменные надо передавать ей явно.
Верно и обратное — переменные, определённые внутри функции, не будут доступны извне. Такие переменные называются локальными, потому что они локальны по отношению к функции.

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

Источник

Вывести аргументы функции php

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

PHP поддерживает передачу аргументов по значению (по умолчанию), передачу аргументов по ссылке, и значения по умолчанию. Списки аргументов переменной длины также поддерживаются, смотрите также описания функций func_num_args() , func_get_arg() и func_get_args() для более детальной информации.

Пример #1 Передача массива в функцию

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

Пример #2 Function Argument List with trailing Comma

Начиная с PHP 8.0.0, передача обязательных аргументов после необязательных аргументов устарела. Обычно это можно решить, отказавшись от значения по умолчанию. Единственным исключением из этого правила являются аргументы формы Type $param = null , где null по умолчанию делает тип неявно допускающим значение null. Это использование остается разрешенным, хотя вместо этого рекомендуется использовать явный тип, допускающий значение null.

Пример #3 Передача необязательных аргументов после обязательных аргументов

function foo ( $a = [], $b ) <> // Раньше
function foo ( $a , $b ) <> // Теперь

function bar ( A $a = null , $b ) <> // Все еще разрешено
function bar (? A $a , $b ) <> // Рекомендуется
?>

Передача аргументов по ссылке

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

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

Пример #4 Передача аргументов по ссылке

Ошибка передачи значения в качестве аргумента, которое должно передаваться по ссылке.

Значения аргументов по умолчанию

Функция может определять значения по умолчанию в стиле C++ для скалярных аргументов, например:

Пример #5 Использование значений по умолчанию в определении функции

Результат выполнения данного примера:

PHP также позволяет использовать массивы ( array ) и специальный тип null в качестве значений по умолчанию, например:

Пример #6 Использование нескалярных типов в качестве значений по умолчанию

Значение по умолчанию должно быть константным выражением, а не (к примеру) переменной или вызовом функции/метода класса.

Обратите внимание, что все аргументы, для которых установлены значения по умолчанию, должны находиться правее аргументов, для которых значения по умолчанию не заданы, в противном случае ваш код может работать не так, как вы этого ожидаете. Рассмотрим следующий пример:

Пример #7 Некорректное использование значений по умолчанию

function makeyogurt ( $type = «ацидофил» , $flavour )
<
return «Готовим чашку из бактерий $type со вкусом $flavour .\n» ;
>

echo makeyogurt ( «малины» ); // Не будет работать так, как мы могли бы ожидать
?>

Результат выполнения данного примера:

Теперь сравним его со следующим примером:

Пример #8 Корректное использование значений по умолчанию

function makeyogurt ( $flavour , $type = «ацидофил» )
<
return «Готовим чашку из бактерий $type со вкусом $flavour .\n» ;
>

echo makeyogurt ( «малины» ); // отрабатывает правильно
?>

Результат выполнения данного примера:

Замечание: Значения по умолчанию могут быть переданы по ссылке.

Списки аргументов переменной длины

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

Замечание: Также можно добиться аргументов переменной длины, используя функции func_num_args() , func_get_arg() и func_get_args() . Этот метод не рекомендуется, поскольку он использовался до введения. токена . .

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

Пример #9 Использование . для доступа к аргументам

function sum (. $numbers ) <
$acc = 0 ;
foreach ( $numbers as $n ) <
$acc += $n ;
>
return $acc ;
>

echo sum ( 1 , 2 , 3 , 4 );
?>

Результат выполнения данного примера:

Многоточие ( . ) можно использовать при вызове функции, чтобы распаковать массив ( array ) или Traversable переменную в список аргументов:

Пример #10 Использование . для передачи аргументов

function add ( $a , $b ) <
return $a + $b ;
>

echo add (. [ 1 , 2 ]). «\n» ;

Результат выполнения данного примера:

Можно задать несколько аргументов в привычном виде, а затем добавить . . В этом случае . поместит в массив только те аргументы, которые не нашли соответствия указанным в объявлении функции.

Также можно добавить объявление типов перед . . В этом случае PHP будет следить, чтобы все аргументы обработанные многоточием ( . ) были того же типа, что указан в подсказке.

Пример #11 Аргументы с подсказкой типов

function total_intervals ( $unit , DateInterval . $intervals ) <
$time = 0 ;
foreach ( $intervals as $interval ) <
$time += $interval -> $unit ;
>
return $time ;
>

$a = new DateInterval ( ‘P1D’ );
$b = new DateInterval ( ‘P2D’ );
echo total_intervals ( ‘d’ , $a , $b ). ‘ days’ ;

// Это не сработает, т.к. null не является объектом DateInterval.
echo total_intervals ( ‘d’ , null );
?>

Результат выполнения данного примера:

В конце концов, можно передавать аргументы по ссылке. Для этого перед . нужно поставить амперсанд ( & ).

Предыдущие версии PHP

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

В первом примере выше было показано, как задать список аргументов переменной длины для предыдущих версий PHP:

Пример #12 Доступ к аргументам в предыдущих версиях PHP

function sum () <
$acc = 0 ;
foreach ( func_get_args () as $n ) <
$acc += $n ;
>
return $acc ;
>

echo sum ( 1 , 2 , 3 , 4 );
?>

Результат выполнения данного примера:

Именованные аргументы

В PHP 8.0.0 представлены именованные аргументы как расширение существующих позиционных параметров. Именованные аргументы позволяют передавать аргументы функции на основе имени параметра, а не позиции параметра. Это делает значение аргумента самодокументированным, делает аргументы независимыми от порядка и позволяет произвольно пропускать значения по умолчанию.

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

Пример #13 Синтаксис именованного аргумента

( paramName : $value );
array_foobar (array: $value );

// НЕ поддерживается
function_name ( $variableStoringParamName : $value );
?>

Пример #14 Позиционные аргументы против именованных аргументов

// Использование позиционных аргументов:
array_fill ( 0 , 100 , 50 );

// Использование именованных аргументов:
array_fill ( start_index : 0 , num : 100 , value : 50 );
?>

Порядок, в котором передаются названные аргументы, не имеет значения.

Пример #15 Тот же пример, что и выше, с другим порядком параметров

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

Пример #16 Объединение именованных аргументов с позиционными аргументами

Передача одного и того же параметра несколько раз приводит к выбрасыванию исключения Error.

Пример #17 Исключение Error при передаче одного и того же параметра несколько раз

foo ( param : 1 , param : 2 );
// Error: Named parameter $param overwrites previous argument
foo ( 1 , param : 2 );
// Error: Named parameter $param overwrites previous argument
?>

Источник

Читайте также:  Как чистить желудки индюка
Оцените статью