
Использование return особенно полезно при работе с вычислениями или форматированием данных. Например, функция, возвращающая сумму двух чисел, позволяет сохранить результат в переменной и использовать его в дальнейшем без дублирования кода.
echo эффективен для быстрого отображения строк, HTML или значений переменных, но не подходит для последующей обработки результата. Комбинация этих операторов обеспечивает гибкость: данные можно сначала обработать через функцию с return, а затем вывести с помощью echo.
Как использовать echo для отображения результата функции

Простейший пример:
<?php
function getGreeting() {
return "Привет, мир!";
}
echo getGreeting(); // Выведет: Привет, мир!
?>
Рекомендации при использовании echo с функциями:
- Можно объединять несколько вызовов функций в одном
echoс конкатенацией:
<?php
function getName() {
return "Алексей";
}
function getAge() {
return 30;
}
echo "Имя: " . getName() . ", Возраст: " . getAge();
// Выведет: Имя: Алексей, Возраст: 30
?>
<?php
function getNumbers() {
return [1, 2, 3];
}
echo implode(", ", getNumbers()); // Выведет: 1, 2, 3
?>
<?php
function calculateDiscount($price, $percent) {
return $price * $percent / 100;
}
$discount = calculateDiscount(1000, 15);
echo "Скидка: " . $discount; // Выведет: Скидка: 150
?>
Использование echo напрямую с функцией сокращает код и улучшает читаемость при простых задачах, но для больших проектов рекомендуется отделять логику от отображения.
В PHP ключевое слово return завершает выполнение функции и передает результат вызывающему коду. Значение, указанное после return, может быть любым типом данных: числом, строкой, массивом, объектом или даже результатом другой функции.
Пример функции, которая возвращает сумму двух чисел:

function sum($a, $b) {
return $a + $b;
}
$result = sum(5, 7);
echo $result; // Выведет 12
Важно присваивать возвращаемое значение переменной, если требуется дальнейшая обработка или повторное использование. Без присваивания значение будет потеряно после выполнения функции.
Возврат массива позволяет возвращать несколько связанных данных одновременно:
function getUserData() {
return [
'name' => 'Иван',
'age' => 28,
'email' => 'ivan@example.com'
];
}
$user = getUserData();
echo $user['name']; // Выведет "Иван"
function greet($name) {
return "Привет, $name!";
}
echo greet('Мария'); // Выведет "Привет, Мария!"
Рекомендуется избегать использования echo внутри функций, предназначенных для вычислений или возвращения данных, чтобы сохранить чистоту кода и возможность повторного использования функции.
При возврате объектов можно обращаться к их свойствам сразу после вызова функции:
function createDateTime() {
return new DateTime();
}
echo createDateTime()->format('Y-m-d H:i:s'); // Выведет текущую дату и время
Использование return делает функции более гибкими и позволяет строить цепочки вызовов без промежуточных переменных, что повышает читаемость и эффективность кода.
<?php
function getUsers() {
$users = [
['id' => 1, 'name' => 'Иван'],
['id' => 2, 'name' => 'Мария']
];
return $users;
}
$result = getUsers();
print_r($result);
?>
<?php
$result = getUsers();
var_dump($result);
?>
<?php
echo '<pre>';
var_dump($result);
echo '</pre>';
?>
При работе с ассоциативными массивами print_r показывает ключи и значения, а var_dump дополнительно указывает типы и вложенность. Для отладки функций и проверки структуры возвращаемых массивов это лучший способ.
Встраивание вызова функции прямо в HTML-код

Пример простого вызова функции в HTML:
<p>Сегодняшняя дата: <?php echo date('d.m.Y'); ?></p>
Функции пользовательского определения также можно использовать. Например, создадим функцию для генерации приветствия:
<?php
function greet($name) {
return "Привет, $name!";
}
?>
<p><?php echo greet('Иван'); ?></p>
<p><?= greet('Мария') ?></p>
Важно помнить, что функции должны быть объявлены до момента их вызова в коде HTML, иначе возникнет ошибка undefined function. Для сложных страниц рекомендуется включать функции через include или require, чтобы структурировать код и облегчить повторное использование.
<?php
function greetUser($name) {
echo "Привет, " . $name . "!";
}
greetUser("Анна"); // Выведет: Привет, Анна!
greetUser("Иван"); // Выведет: Привет, Иван!
?>
Для передачи нескольких значений можно использовать несколько параметров:
<?php
function displayProduct($name, $price) {
echo "Товар: " . $name . ", цена: " . $price . " руб.";
}
displayProduct("Кофемашина", 12000);
displayProduct("Тостер", 2500);
?>
Можно задавать параметры по умолчанию, чтобы функция оставалась универсальной:
<?php
function showMessage($message = "Сообщение отсутствует") {
echo $message;
}
showMessage(); // Выведет: Сообщение отсутствует
showMessage("Добро пожаловать!"); // Выведет: Добро пожаловать!
?>
<?php
function renderTable($data) {
echo "<table border='1'>";
foreach ($data as $row) {
echo "<tr>";
foreach ($row as $cell) {
echo "<td>" . $cell . "</td>";
}
echo "</tr>";
}
echo "</table>";
}
$products = [
["Кофемашина", 12000],
["Тостер", 2500],
["Блендер", 4800]
];
renderTable($products);
?>
В PHP ошибки внутри функции можно контролировать с помощью конструкции try-catch. Это позволяет перехватывать исключения и предоставлять пользователю или разработчику понятное сообщение об ошибке без прерывания выполнения скрипта.
Пример обработки ошибки деления на ноль:

function divide($a, $b) {
try {
if ($b === 0) {
throw new Exception("Деление на ноль невозможно");
}
return $a / $b;
} catch (Exception $e) {
return "Ошибка: " . $e->getMessage();
}
}
Функция возвращает результат деления, если входные данные корректны, и текст ошибки при недопустимых значениях. Использование Exception позволяет централизовать обработку ошибок и предотвращает появление фатальных ошибок.
Для ошибок уровня предупреждений (E_WARNING) или уведомлений (E_NOTICE) можно применять функцию set_error_handler внутри функции или класса. Это дает возможность конвертировать предупреждения в исключения и единообразно их обрабатывать:
function safeFileRead($filename) {
set_error_handler(function($errno, $errstr) {
throw new Exception($errstr);
});
try {
$content = file_get_contents($filename);
restore_error_handler();
return $content;
} catch (Exception $e) {
restore_error_handler();
return "Ошибка при чтении файла: " . $e->getMessage();
}
}
Рекомендация: всегда восстанавливайте предыдущий обработчик ошибок после выполнения критической операции, чтобы избежать непредсказуемого поведения других частей скрипта.
class ValidationException extends Exception {}
function validateAge($age) {
if ($age < 0 || $age > 120) {
throw new ValidationException("Недопустимый возраст: $age");
}
return true;
}
Использование таких классов упрощает обработку ошибок в больших проектах и позволяет вести точный лог ошибок с классификацией по типам.
