Intereting Posts
В чем разница между локальным значением и значением ведущего file_get_contents возвращает 403 запрещенных У меня ошибка в laravel по функции /vendor/guzzlehttp/psr7/src/functions.php в строке 77 Wordwrap / Cut Text в строке HTML Сортировка MySQL-запроса с помощью ORDER BY или с помощью функций сортировки PHP Вставка информации в таблицу соединений ColdFusion Форма PHP session_start (): не удается отправить ограничитель кеша сеанса Кнопка «Назад браузера» перенаправляется на 1-ю страницу, пока она должна перейти на предыдущую посещенную страницу при использовании пейджинга Как вырезать результаты из пользовательского запроса в Laravel Echo 'string', в то время как каждая итерация длинного цикла (flush () не работает) Как base64-декодировать большие файлы в PHP Ошибка при обновлении таблицы MySQL yii Фильтр CGridView с отношениями Как сохранить и извлечь данные сеанса в codeigniter Внедрение пространств имен в режиме без жира

PHP возвращаемый тип намека, объект ИЛИ логический?

Поэтому я знаю, что могу возвращать тип намека на php7. Я могу сделать подсказку с объектом:

function getUser($pdo, $username) : User { } 

где Пользователь является возвращаемым объектом.

Однако, если пользователь не найден в SQL, возвращающий 'false' вместо объекта User дает:

Uncaught TypeError: возвращаемое значение UserFind :: findUser () должно быть экземпляром User, boolean возвращено

Но что, если SQL не может найти пользователя? Как я могу вернуть логическое, false, если пользователь не существует? Должен ли я просто игнорировать тип возвращаемого типа в этом сценарии?

EDIT: Я рассмотрел другой вопрос: «Нулевые типы возвращаемых данных в php 7», и хотя мой вопрос почти идентичен, я хочу расширить свой вопрос, спросив, будет ли когда-нибудь возвращаться один из двух типов. Например, верните объект или строку, если объект небезопасен?

    То, о чем вы говорите, называется Union Type. Об этом много говорят в Internals

    Этот RFC предлагает возможность определять несколько возможных типов для параметра или возвращаемого типа и называет их «типами объединения». Значение передает проверку типа для типа объединения, если значение передало бы один из членов объединения. Вертикальная полоса (OR) помещается между каждым из двух или более типов.

    Ниже приведен пример параметра, принимающего либо массив, либо Traversable, либо других типов:

     function (Array | Traversable $in) { foreach ($in as $value) { echo $value, PHP_EOL; } } 

    В союзе может быть более двух типов. В качестве примера, это несколько обычное явление для подпрограммы, которая взаимодействует с базой данных, чтобы иметь один из трех результатов:

    1. Успешно найдены результаты
    2. Успешно не найдено результатов
    3. Там была ошибка

    Все это нацелено на PHP 7.1, но пока не готово к голосованию (не говоря уже о том, как он пройдет).

    Так как насчет вашей проблемы? Я бы сказал, по крайней мере пока, не набирайте намек на свое возвращение. Просто выпустите блок doc, который говорит, что он может вернуть User или false

     /** * @param \PDO $pdo * @param string $username * @return User|false */