В 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);