Возвращение значения 1 через оператор return в различных сценариях PHP

Раздел: Основы PHP -> Оператор return

Возврат значения 1 в операторе return PHP

Оператор return в PHP может возвращать любое выражение, включая целое число 1. Такое возвращаемое значение часто используется для обозначения успешного завершения, истинностного состояния или как признак выполнения некоторого условия. В данной части рассматриваются различные способы применения return 1, их цели, возникающие проблемы и способы их решения.

Наиболее эффективное решение - использование return 1 как единого индикатора успеха в функциях валидации или обработки данных. Такой подход упрощает логику проверки: если функция возвращает 1, значит условие выполнено или операция прошла без ошибок.

function checkAge(int $age): int {
    if ($age >= 18) {
        return 1; // пользователь совершеннолетний
    }
    return 0; // несовершеннолетний
}

$result = checkAge(25);
if ($result === 1) {
    echo "Доступ разрешен";
}

Здесь возвращается именно число 1, а не булево true. Это позволяет строго различать успешное выполнение (1) и другие возможные состояния (0, -1 и т.д.). При проверке используется оператор строгого сравнения ===, чтобы избежать приведения типов.

Типичная ошибка: нестрогое сравнение (==) может привести к ложному срабатыванию, так как 1 == true даёт true. Если в будущем функция будет возвращать true вместо 1, логика нарушится. Решение - всегда использовать === при проверке на 1.

Как сделать возврат булевого значения через целое число?

Вместо return true можно вернуть 1, особенно в функциях, где ожидается целочисленный результат (например, в callback-функциях сортировки). Это улучшает читаемость кода при работе с математическими операциями.

function isPositive(int $value): int {
    return $value > 0 ? 1 : 0;
}

$positive = isPositive(42); // 1

Проблема: смешение типов в одном контексте. Если функция иногда возвращает 1, а иногда true, код становится непредсказуемым. Решение - выбрать один стиль и придерживаться его во всём проекте.

Как передать результат выполнения из подключаемого файла?

Файл, подключаемый через include или require, может использовать return 1 для передачи значения обратно в вызывающий скрипт. Это удобно для конфигураций или обработчиков.

// config.php
return 1;

// index.php
$status = include 'config.php';
if ($status === 1) {
    echo "Конфигурация загружена";
}

Файл return возвращает значение, которое присваивается переменной. При отсутствии return результатом будет 1 (true), но явное указание делает поведение более предсказуемым.

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

Как прервать выполнение функции при определённом условии?

Досрочный выход из функции с возвратом 1 - распространённая техника (guard clause). Она помогает избежать глубокой вложенности.

function processInput($data) {
    if (empty($data)) {
        return 1; // сигнал: нет данных
    }
    // основная обработка...
    return 0; // успех
}

if (processInput($input) === 1) {
    echo "Обработка не выполнена из-за пустых данных";
}

Здесь 1 выступает как код ошибки. Возвращаемое значение можно расширить до набора констант для разных ситуаций.

Проблема: смешивание кодов ошибок с обычными результатами может запутать. Лучше использовать отдельный класс или перечисление (enum) для кодов возврата.

Как использовать return 1 в функции сравнения для usort?

Функции сортировки usort ожидают целочисленный результат: отрицательное число, 0 или положительное. Возврат 1 означает, что первый элемент больше второго.

$numbers = [3, 1, 4, 2];
usort($numbers, function($a, $b) {
    if ($a > $b) return 1;
    if ($a < $b) return -1;
    return 0;
});
print_r($numbers); // [1, 2, 3, 4]

Здесь return 1 строго соответствует положительному результату сравнения. Вместо него можно было бы использовать return $a <=> $b, но явный возврат 1 даёт полный контроль.

Ошибка: возврат true (который приводится к 1) также работает, но при включённой строгой типизации может быть неожиданно преобразован в целое. Лучше явно указывать 1, -1 и 0.

Расширенные примеры с return 1

В этом разделе приведены нестандартные случаи использования return 1, а также примеры с подробным объяснением результата.

Комбинирование кодов возврата: проверка нескольких условий

Функция возвращает 1, -1 или 0 в зависимости от результата сравнения двух строк.

Пример
function compareStrings(string $a, string $b): int {
    if ($a === $b) return 0;
    if (strlen($a) > strlen($b)) return 1;
    return -1;
}

$result = compareStrings("PHP", "Python");
echo $result; // -1 (строка "PHP" короче)
-1

Подобная техника используется в пользовательских функциях сравнения для сортировки объектов.

Return 1 в рекурсивной функции для поиска элемента

Функция проверяет, существует ли значение в многомерном массиве. Возврат 1 означает, что элемент найден.

Пример
function findInArray(array $arr, $needle): int {
    foreach ($arr as $item) {
        if (is_array($item)) {
            if (findInArray($item, $needle) === 1) {
                return 1;
            }
        } elseif ($item === $needle) {
            return 1;
        }
    }
    return 0;
}

$data = [1, [2, 3], [4, [5]]];
echo findInArray($data, 5) ? "Найдено" : "Не найдено";
Найдено

Здесь 1 используется как индикатор истины, а 0 - как ложь. Рекурсия не пропускает ни одного уровня.

Return 1 в анонимной функции для array_filter

array_filter ожидает callback, возвращающий true для тех элементов, которые нужно оставить. Можно вернуть 1, так как в булевом контексте 1 приводится к true.

Пример
$numbers = [10, 15, 20, 25, 30];
$filtered = array_filter($numbers, function($value) {
    return $value % 10 === 0 ? 1 : 0;
});
print_r($filtered);
Array
(
    [0] => 10
    [2] => 20
    [4] => 30
)

Несмотря на то, что return 1 технически корректен, рекомендуется использовать return true, чтобы не вводить в заблуждение других разработчиков.

Return 1 в генераторе с yield

Генератор может использовать return 1 для передачи итогового значения после перебора.

Пример
function generateNumbers() {
    yield 1;
    yield 2;
    yield 3;
    return 1; // итоговое значение
}

$gen = generateNumbers();
foreach ($gen as $value) {
    echo $value . " ";
}
echo PHP_EOL . "Возврат: " . $gen->getReturn();
1 2 3 
Возврат: 1

Это удобно, когда нужно дополнительно сообщить об успешном завершении итерации, например, в протоколах обмена данными.

Использование return 1 с exit в консольных скриптах

В командной строке exit(1) обычно означает ошибку. Но если в вызываемом скрипте используется return 1, то при выполнении через include это значение может быть использовано как код выхода.

Пример
// script.php
function doWork(): int {
    // ...
    return 1;
}

$status = doWork();
exit($status);

// Из командной строки:
// php script.php && echo "OK" || echo "FAIL"

Код вернёт 1, что оболочка интерпретирует как статус ошибки, если ожидается 0 при успехе. Поэтому важно согласовывать значения.

Возврат 1 в PHP - comments

En
Php return 1 (php)