- Параметры функций в PHP
- Несколько параметров
- Параметры-переменные
- Необязательные параметры
- Php вывести параметры функции
- Параметр = $string
- PHP: Параметры и аргументы функции
- Аргументы и параметры
- Передача аргументов
- Значение, возвращаемое функцией
- Аргументы функции
- Передача аргументов по ссылке
- Значения аргументов по умолчанию
- Объявление типов
- Valid types
- Примеры
- Строгая типизация
- Списки аргументов переменной длины
- . в PHP 5.6+
- Предыдущие версии PHP
Параметры функций в PHP
При вызове функции мы пишем ее имя и пустые круглые скобки:
На самом деле скобки не обязательно должны быть пустыми — в них мы можем передавать параметры.
Пусть, к примеру, мы хотим сделать функцию, которая параметром будет принимать число и выводить на экран квадрат этого числа.
Как мы теперь будем вызывать нашу функцию: мы будем писать имя функции, круглые скобки, а в них — какое-то число, квадрат которого мы хотим получить.
К примеру, вот так мы получим квадрат числа 2 :
А вот так — квадрат числа 3 :
Давайте теперь напишем реализацию нашей функции.
Мы знаем, что функция параметром должна принимать число. Значит, при определении функции в круглых скобках мы должны написать какую-то переменную, в которую будет попадать переданное число.
Название переменной может быть любым, давайте, например, назовем ее $num :
В эту переменную $num при вызове функции будет попадать указанное в круглых скобках число:
Давайте теперь сделаем так, чтобы наша функция выводила квадрат переданного числа. Для этого перемножим переменную $num саму на себя и выведем на экран:
Проверим работу функции, вызвав ее с различными числами:
Сделайте функцию, которая параметром принимает число и выводит на экран куб этого числа.
Сделайте функцию, которая параметром принимает число и проверяет, положительное это число или отрицательное. В первом случае пусть функция выводит на экран текст ‘+++’ , а во втором ‘—‘ .
Несколько параметров
Функция может принимать не один параметр, а несколько. В этом случае их нужно перечислить через запятую. Давайте для примера сделаем функцию, параметром принимающую два числа и выводящую на экран их сумму:
Сделайте функцию, которая параметрами принимает 3 числа и выводит на экран сумму этих чисел.
Параметры-переменные
Давайте рассмотрим следующий код:
Как вы видите, в при вызове функции в нее передается число 2 .
Не обязательно параметром функции передавать именно число — можно передать и переменную, содержащую нужное нам число:
Сделайте функцию func , которая параметром будет принимать 3 числа и выводить на экран их сумму. С помощью этой функции выведите на экран сумму значений следующих переменных:
Необязательные параметры
Пусть у нас есть функция, которая параметром принимает имя и выводит его на экран:
Проверим работу нашей функции:
Давайте теперь сделаем так, чтобы имя было не обязательным: если оно будет введено, то выведется на экран, а если не введено — то пусть принимает значение ‘Аноним’ .
Для того, чтобы сделать параметр необязательным, для него нужно определить значение по умолчанию. Для этого при определении параметра нужно поставить знак = и желаемое значение, вот так:
Проверим теперь работу нашей функции:
Пусть теперь наша функция принимает два параметра: имя и возраст:
Давайте сделаем так, чтобы возраст был необязателен:
А теперь сделаем так, чтобы и имя, и возраст были необязательны:
А вот сделать так, чтобы имя было необязательным, а возраст — нет, нельзя. Дело в том, что все необязательные параметры следует писать в конце. Смотрите пример:
Эта функция вызывается следующим образом:
Расскажите, каким будет результат каждого из вызовов функции.
Эта функция вызывается следующим образом:
Расскажите, каким будет результат каждого из вызовов функции.
Источник
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 для получения значения, которым будет инициализирован параметр. Проще говоря, аргумент — это переданное функции значение:
Передача аргументов
PHP поддерживает два способа передачи аргументов функции. Первый — передача аргументов по значению (работает по умолчанию), второй — передача аргументов по ссылке. Также PHP поддерживает значения по умолчанию. Давайте теперь рассмотрим все три варианта подробнее.
По умолчанию аргументы передаются в функцию по значению (это значит, если вы измените значение параметра внутри функции, то вне ее переданное значение останется прежним):
Если необходимо разрешить функции изменять переданные аргументы за ее пределами, вы должны передавать их по ссылке. Для того, чтобы аргумент был передан по ссылке, необходимо указать знак & (амперсанд) перед именем параметра в определении функции:
Функции могут определять значения аргументов по умолчанию. Чтобы установить значение по умолчанию, в определении функции нужно всего лишь присвоить параметру желаемое значение:
Значение, возвращаемое функцией
Когда выполнение функции завершается, она может возвратить некоторое значение (результат работы функции) программе, которая её вызвала. Оператор return внутри функций служит для определения значения, возвращаемого функцией. В качестве возвращаемого значения может быть любой тип. Он имеет следующий синтаксис:
Оператор return может быть расположен в любом месте функции. Когда до него доходит управление, функция возвращает значение (если указано) и завершает свое выполнение. Если оператор return не указан или не указано возвращаемое значение, то функция вернет значение NULL . Для использования возвращаемого значения, результат выполнения функции можно присвоить к примеру переменной:
Источник
Аргументы функции
Функция может принимать информацию в виде списка аргументов, который является списком разделенных запятыми выражений. Аргументы вычисляются слева направо.
PHP поддерживает передачу аргументов по значению (по умолчанию), передачу аргументов по ссылке, и значения по умолчанию. Списки аргументов переменной длины также поддерживаются, смотрите также описания функций func_num_args() , func_get_arg() и func_get_args() для более детальной информации.
Пример #1 Передача массива в функцию
Передача аргументов по ссылке
По умолчанию аргументы в функцию передаются по значению (это означает, что если вы измените значение аргумента внутри функции, то вне ее значение все равно останется прежним). Если вы хотите разрешить функции модифицировать свои аргументы, вы должны передавать их по ссылке.
Если вы хотите, что бы аргумент всегда передавался по ссылке, вы можете указать амперсанд (&) перед именем аргумента в описании функции:
Пример #2 Передача аргументов по ссылке
Значения аргументов по умолчанию
Функция может определять значения по умолчанию в стиле C++ для скалярных аргументов, например:
Пример #3 Использование значений по умолчанию в определении функции
Результат выполнения данного примера:
PHP также позволяет использовать массивы ( array ) и специальный тип NULL в качестве значений по умолчанию, например:
Пример #4 Использование нескалярных типов в качестве значений по умолчанию
Значение по умолчанию должно быть константным выражением, а не (к примеру) переменной или вызовом функции/метода класса.
Обратите внимание, что все аргументы, для которых установлены значения по умолчанию, должны находиться правее аргументов, для которых значения по умолчанию не заданы, в противном случае ваш код может работать не так, как вы этого ожидаете. Рассмотрим следующий пример:
Пример #5 Некорректное использование значений по умолчанию
function makeyogurt ( $type = «ацидофил» , $flavour )
<
return «Готовим чашку из бактерий $type со вкусом $flavour .\n» ;
>
echo makeyogurt ( «малины» ); // Не будет работать так, как мы могли бы ожидать
?>
Результат выполнения данного примера:
Теперь сравним его со следующим примером:
Пример #6 Корректное использование значений по умолчанию
function makeyogurt ( $flavour , $type = «ацидофил» )
<
return «Готовим чашку из бактерий $type со вкусом $flavour .\n» ;
>
echo makeyogurt ( «малины» ); // отрабатывает правильно
?>
Результат выполнения данного примера:
Замечание: Начиная с PHP 5, значения по умолчанию могут быть переданны по ссылке.
Объявление типов
Объявление типов также известно, как подсказки для типов в PHP 5.
Объявления типов позволяют функциям строго задавать тип передаваемых параметров. Передача в функцию значений несоответствующего типа будет приводить к ошибке: в PHP 5 это будет обрабатываемая фатальная ошибка, а в PHP 7 будет выбрасываться исключение TypeError.
Чтобы объявить тип агрумента, необходимо перед его именем добавить имя требуемого типа. Также можно объявить тип NULL , чтобы указать, что значением по умолчанию аргумента является NULL .
Valid types
Тип | Описание | Минимальная версия PHP |
---|---|---|
Имя класса/интерфейса | Агрумент должен быть instanceof, что и имя класса или интерфейса. | PHP 5.0.0 |
array | Аргумент должен быть типа array . | PHP 5.1.0 |
callable | Аргумент должен быть корректным callable типом. | PHP 5.4.0 |
bool | Аргумент должен быть типа boolean . | PHP 7.0.0 |
float | Аргумент должен быть float типа. | PHP 7.0.0 |
int | Аргумент должен быть типа integer . | PHP 7.0.0 |
string | Аргумент должен иметь тип string . | PHP 7.0.0 |
Примеры
Пример #7 Основные объявления типов-классов
class C <>
class D extends C <>
// Это не является расширением класса C.
class E <>
function f ( C $c ) <
echo get_class ( $c ). «\n» ;
>
f (new C );
f (new D );
f (new E );
?>
Результат выполнения данного примера:
Пример #8 Основные объявления типов-интерфейсов
// Это не реализует интерфейс I.
class E <>
function f ( I $i ) <
echo get_class ( $i ). «\n» ;
>
Результат выполнения данного примера:
Пример #9 Объявление типа Null
function f ( C $c = null ) <
var_dump ( $c );
>
Результат выполнения данного примера:
Строгая типизация
По умолчанию, PHP будет пытаться привести значения несоответствующих типов к скалярному типу, если это возможно. Например, если в функцию передается integer , а тип аргумента объявлен string , в итоге функция получит преобразованное string значение.
Для отдельных файлов можно включать режим строгой типизации. В этом режиме в функцию можно передавать значения только тех типов, которые объявлены для аргументов. В противном случае будет выбрасываться исключение TypeError. Есть лишь одно исключение — integer можно передать в функцию, которая ожидает значение типа float .
Для влючения режима строгой типизации используется выражение declare в объявлении strict_types:
Включение режима строгой типизации также повлияет на объявления типов возвращаемых значений.
Режим строгой типизации распространяется на вызовы функций совершенные из файла, в котором этот режим включен, а не на функции, которые в этом файле объявлены. Если файл без строгой типизации вызывает функцию, которая объявлена в файле с включенным режимом, значения аргументов будут приведены к нужным типам и ошибок не последует.
Строгая типизация применима только к скалярным типам и работает только в PHP 7.0.0 и выше. Равно как и сами объявления скалярных типов добавлены в этой версии.
Пример #10 Строгая типизация
declare( strict_types = 1 );
function sum ( int $a , int $b ) <
return $a + $b ;
>
var_dump ( sum ( 1 , 2 ));
var_dump ( sum ( 1.5 , 2.5 ));
?>
Результат выполнения данного примера:
Пример #11 Слабая типизация
function sum ( int $a , int $b ) <
return $a + $b ;
>
var_dump ( sum ( 1 , 2 ));
// These will be coerced to integers: note the output below!
var_dump ( sum ( 1.5 , 2.5 ));
?>
Результат выполнения данного примера:
Пример #12 Обработка исключения TypeError
declare( strict_types = 1 );
function sum ( int $a , int $b ) <
return $a + $b ;
>
try <
var_dump ( sum ( 1 , 2 ));
var_dump ( sum ( 1.5 , 2.5 ));
> catch ( TypeError $e ) <
echo ‘Error: ‘ . $e -> getMessage ();
>
?>
Результат выполнения данного примера:
Списки аргументов переменной длины
PHP поддерживает списки аргументов переменной длины для функций, определяемых пользователем. Для версий PHP 5.6 и выше это делается добавлением многоточия (. ). Для версий 5.5 и старше используются функции func_num_args() , func_get_arg() и func_get_args() .
. в PHP 5.6+
В версиях PHP 5.6 и выше список аргументов может содержать многоточие . , чтобы показать, что функция принимает переменное количество аргументов. Аргументы в этом случае будут переданы в виде массива. Например:
Пример #13 Использование . для доступа к аргументам
function sum (. $numbers ) <
$acc = 0 ;
foreach ( $numbers as $n ) <
$acc += $n ;
>
return $acc ;
>
echo sum ( 1 , 2 , 3 , 4 );
?>
Результат выполнения данного примера:
Многоточие (. ) можно использовать при вызове функции, чтобы распаковать массив ( array ) или Traversable переменную в список аргументов:
Пример #14 Использование . для передачи аргументов
function add ( $a , $b ) <
return $a + $b ;
>
echo add (. [ 1 , 2 ]). «\n» ;
Результат выполнения данного примера:
Можно задать несколько аргументов в привычном виде, а затем добавить . . В этом случае . поместит в массив только те аргументы, которые не нашли соответствия указанным в объявлении функции.
Также можно добавить подсказку типа перед . . В этом случае PHP будет следить, чтобы все аргументы обработанные многоточием (. ) были того же типа, что указан в подсказке.
Пример #15 Аргументы с подсказкой типов
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’ ;
// This will fail, since null isn’t a DateInterval object.
echo total_intervals ( ‘d’ , null );
?>
Результат выполнения данного примера:
В конце концов, можно передавать аргументы по ссылке. Для этого перед . нужно поставить амперсанд (&).
Предыдущие версии PHP
Для указания того, что функция принимает переменное число аргументов, никакой специальный синтаксис не используется. Для доступа к аргументам необходимо использовать функции func_num_args() , func_get_arg() и func_get_args() .
В первом примере выше было показано, как задать список аргументов переменной длины для версий PHP 5.5 и более ранних:
Пример #16 Доступ к аргументам в PHP 5.5 и ранних версий
function sum () <
$acc = 0 ;
foreach ( func_get_args () as $n ) <
$acc += $n ;
>
return $acc ;
>
Источник