Оператор return: все способы возврата значений в PHP
Оператор return в PHP
Оператор return завершает выполнение текущей функции (или скрипта) и возвращает переданное значение вызывающему коду. Если значение не указано, возвращается null. Это основной механизм передачи данных из функции во внешнюю среду.
<?php
function sum($a, $b) {
return $a + $b;
}
echo sum(3, 4); // 7
?>
Htm php (html и php)
После return выполнение функции немедленно прекращается, все последующие операторы игнорируются.
Типичная ошибка:
Забыть написать return. В этом случае функция возвращает null без явного указания.
<?php
function badSum($a, $b) {
$result = $a + $b;
// return отсутствует
}
var_dump(badSum(3,4)); // NULL
?>
язык разработки php (php (язык разработки))
Решение:
Всегда явно указывать return для всех путей выполнения функции.
Как вернуть несколько значений из функции?
Прямая передача нескольких значений невозможна, поэтому используется массив, объект или генератор.
<?php
function getStats($arr) {
return [
'min' => min($arr),
'max' => max($arr),
'avg' => array_sum($arr) / count($arr)
];
}
$data = getStats([2,5,3,8]);
list($min, $max) = [getStats([2,5,3,8])['min'], getStats([2,5,3,8])['max']];
// Или использовать деструктуризацию (PHP 7.1+):
['min' => $min, 'max' => $max, 'avg' => $avg] = getStats([2,5,3,8]);
?>
Custom index php (создание собственного index.php)
Проблемы:
Неверный порядок индексов при использовании числового массива может привести к путанице. Рекомендуется применять ассоциативные ключи или возвращать объект.
Как выйти из функции досрочно?
Ранний возврат (early return) позволяет прервать выполнение при выполнении определённого условия, уменьшая вложенность кода.
<?php
function validateEmail($email) {
if (empty($email)) {
return false;
}
// проверка формата
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
return false;
}
return true;
}
?>
Https page php (страница php через https)
Типичная ошибка:
После условия забыть указать return для остальных веток, что приводит к продолжению выполнения.
Решение:
Всегда явно возвращать значение в каждом логическом пути.
Можно ли вернуть ничего (void)?
Оператор return без выражения возвращает null. Такую конструкцию используют для прерывания работы функции без возврата данных.
<?php
function processItem(&$item) {
if ($item === null) {
return; // возвращает null
}
$item = strtoupper($item);
}
$value = null;
processItem($value);
var_dump($value); // NULL
?>
простой php (простые примеры php)
Проблемы:
Путаница между возвратом null и отсутствием значения. Явное указание return null делает намерение более ясным.
Как вернуть переменную по ссылке?
Функция может вернуть ссылку на внешнюю переменную, если определить её с & и в теле использовать return &$var.
<?php
$external = 100;
function &getRef() {
global $external;
return $external;
}
$ref = &getRef();
$ref = 200;
echo $external; // 200
?>
Return php (оператор return в php)
Ошибки:
Нельзя возвращать ссылку на локальную переменную, так как она будет уничтожена после выхода из функции. Это приводит к предупреждению.
Решение:
Возвращать ссылки только на глобальные, статические или переданные по ссылке переменные.
Что возвращает оператор return в подключаемом файле?
Файл, подключаемый через include или require, может содержать return. Тогда результатом вызова include будет возвращённое значение.
<!-- config.php -->
<?php
return [
'host' => 'localhost',
'user' => 'root'
];
?>
<?php
$config = include 'config.php';
var_dump($config); // array(2) { ["host"]=> string(9) "localhost" ... }
?>
Php return file (возврат файла из функции в php)
Типичная ошибка:
Если файл не заканчивается оператором return, include возвращает 1. Это может быть неочевидно.
Как использовать return в генераторах?
Генератор может содержать return, который задаёт окончательное значение, доступное через метод getReturn().
<?php
function gen() {
yield 1;
yield 2;
return 3;
}
$generator = gen();
foreach ($generator as $value) {
echo $value; // 1 2
}
echo $generator->getReturn(); // 3
?>
Проблемы:
Не путать yield с return. return в генераторе не прерывает итерацию, а задаёт финальное значение.
Расширенные примеры использования return
<?php
// 1. Возврат замыкания (closure)
function multiplier($factor) {
return function($value) use ($factor) {
return $value * $factor;
};
}
$double = multiplier(2);
echo $double(5); // 10
?>
10
<?php
// 2. Возврат объекта
class User {
public $name;
}
function createUser($name) {
$user = new User();
$user->name = $name;
return $user;
}
$u = createUser('Alice');
echo $u->name; // Alice
?>
Alice
<?php
// 3. Рекурсивный return
function factorial($n) {
if ($n <= 1) {
return 1;
}
return $n * factorial($n - 1);
}
echo factorial(5); // 120
?>
120
<?php
// 4. Return в блоке try/finally
function testFinally() {
try {
return 'из try';
} finally {
echo 'finally выполнен';
}
}
echo testFinally(); // finally выполнен из try
?>
finally выполнен из try
<?php
// 5. Return в eval()
$code = 'return 42;';
$result = eval($code);
echo $result; // 42
?>
42
<?php
// 6. Return с null coalescing оператором
function getConfig($key) {
$config = [
'host' => 'localhost',
'port' => 3306
];
return $config[$key] ?? 'default';
}
echo getConfig('user'); // default
echo getConfig('host'); // localhost
?>
defaultlocalhost
<?php
// 7. Return и nullsafe оператор (PHP 8)
class Address {
public ?string $city;
}
class Person {
public ?Address $address;
}
function getCity(?Person $person): ?string {
return $person?->address?->city;
}
$p = new Person();
$p->address = new Address();
$p->address->city = 'Moscow';
echo getCity($p); // Moscow
echo getCity(null); // (ничего, null)
?>
Moscow
<?php
// 8. Return в стрелочных функциях (PHP 7.4+)
$add = fn($a, $b) => $a + $b;
echo $add(2,3); // 5
?>
5
<?php
// 9. Return в статических методах
class MathHelper {
public static function square($x) {
return $x * $x;
}
}
echo MathHelper::square(4); // 16
?>
16
<?php
// 10. Return с match выражением (PHP 8)
function describeNumber($n) {
return match(true) {
$n > 0 => 'положительное',
$n < 0 => 'отрицательное',
default => 'ноль'
};
}
echo describeNumber(-5); // отрицательное
echo describeNumber(0); // ноль
?>
отрицательноеноль