# Функции

**Синтаксис:**

```php
function [&] имя_функции([parameter,...]) {

  return $perem;
}
```

&amp; - передача по ссылке

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

```php
function getPreferences($whichPreference = 'all')
```

**Функция, возвращающая текст**

```php
<?php function column() {
  ?>
  </td><td>
  <?php }
```

**Вложенные объявления:**

- Не ограничивают видимость внутренней функции, которая может быть вызва­на в любом месте вашей программы.
- Автоматически не получает параметры внешней функции.
- Внутренняя функ­ция не может быть вызвана, пока не была вызвана внешняя функция,
- Нельзя вызвать из кода, обработанноrо после внешней функции

**Функция с динамическим количеством переменных**

```
function getPreferences()
```

- func\_get\_args() - массив всех переданных параметров функции.
- func\_num\_args() - количество параметров, переданных функции.
- func\_get\_arg($num) - параметр с определенным номером.

При отсутствии аргумента будет выведено предупреждение.

Контроль типа есть, но только относительно классов, массивов или функций. Примитивы нельзя.

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

function\_exist($fname) определяет наличие функции с данным именем

**Анонимная функция (замыкание)**

```php
usort($array, function($a, $b){
  return strlen($a) - strlen($b)
})
```

Для передачи внутрь переменных используется use

```php
usort($array, function($a, $b) use ($Someperem){
  if ($Someperem == 'random') {return rand(0,2) - 1;}
  else {
    return strlen($a) - strlen($b)
    }
})
```