PHP 7: Пользовательские функции. Декларация, вызов и возврат значений.
В php уже есть большое количество встроенных функций. Сегодня кратко о декларации и вызове пользовательских функций, аргументах функции, области видимости переменных тд.
Функция – это участок кода, который можно многократно выполнять в различных местах PHP скрипта когда нам это угодно. Чтобы функцию запустить на выполнение, необходимо её вызвать.
Декларация и вызов функции
// Декларация функции <?php function sayHello() { echo "<h1>Hello, world!</h1>"; } // Вызов функции sayHello();
Аргументы функции
function sayHello($name) { echo "<h1>Hello, $name!</h1>"; } // Передаём литерал sayHello("John"); // Hello, John! // Передаём значение переменной $name = "Mike"; sayHello($name); // Hello, Mike! // Обращение к функции через переменную $func = "sayHello"; $func("Guest"); // Hello, Guest! $x = function ($name) { echo "Hello, $name!".PHP_EOL; }; $x('Donald'); // Hello, Donald! // Аргументы по-умолчанию function sayHello($name = "Guest") { echo "<h1>Hello, $name!</h1>"; } sayHello("John"); // Hello, John! sayHello(); // Hello, Guest!
Области видимости переменных
function sayHello($name) { echo "<h1>Hello, $name!</h1>"; $name = "Вася"; } sayHello("John"); $name = "Mike"; sayHello($name); echo$name;//??? //Обращение к глобальным переменным: вариант 1 function sayHello($name) { echo "<h1>Hello, $name!</h1>"; global $name; $name = "Вася"; } $name = "Mike"; sayHello($name); echo$name;//Вася //Обращение к глобальным переменным: вариант 2 function sayHello($name) { echo "<h1>Hello, $name!</h1>"; $GLOBALS["name"]= "Вася"; } $name = "Mike"; sayHello($name); echo$name;//Вася //Обращение к глобальным переменным: вариант 3 function sayHello(&$name) { echo "<h1>Hello, $name!</h1>"; $name = "Вася"; } $name = "Mike"; sayHello($name); echo$name;//Вася sayHello("John"); //ERROR!!!
Статические переменные
function test(){ $a = 0; echo $a++; } test(); // 0 test(); // 0 test(); // 0 function test(){ static $a = 0; echo $a++; } test(); // 0 test(); // 1 test(); // 2
Возвращаемые значения
function square($num) { return $num * $num; // Этот код никогда не исполнится echo "Мертвый код"; } echo square(4); // 16 $result= square(4); // Возвращение массива function numbers() { return [1, 2, 3]; } list($one, $two, $three) = numbers(); // Разыменовывание массива (PHP 5.4) $two= numbers()[1];
Функция с переменным числом аргументов
foo(1, 2, 3); function foo() { $numargs = func_num_args(); echo "Всего аргументов: $numargs\n"; echo "Второй аргумент: " . func_get_arg(1) . "\n"; $args = func_get_args(); foreach ($args as $key => $value) { echo "Аргумент$key : $value\n"; } } // PHP 5.6 function foo(...$nums) { foreach ($nums as $key => $value) { echo "Аргумент$key : $value\n"; } } // и function sum($n1, $n2) { return ($n1 + $n2; } sum(...[2, 5]);
Уточнение типа
function foo(array $var) { // Ожидается только массив! } function mult($num) { return $num * $num; } // PHP 5.4 function bar(callable $var, $arg) { return $var($arg); } bar("mult", 4); // PHP 7 function foo(int $i, string $s,bool $b,int ...$nums):bool { return $b; // Ожидается только массив! } // Включение строгой типизации declare(strict_types=1);