Я пересматривал базу кода для использования с PHP7, в частности, применяя подсказки скалярного типа и подсказки возвращаемого типа, когда у меня возникла проблема.Возвращение NULL с декларациями типа возвращаемого значения
У меня есть класс с некоторыми свойствами, один из которых id. Этот идентификатор не является обязательным (вы можете создать объект без установки id). При создании нового объекта этого класса вы не устанавливаете id, и он получает идентификатор, как только он вставлен в db (отдельным классом сопоставления).
Этот картографа класс должен проверить, если объект уже существует в БД, и он делает это, проверяя, если идентификатор установлен:
if(empty($exampleObject->getId())) {
// Insert object
} else {
// Update object
}
Я прикладывал намеков Возвращаемый тип каждой функции в моем коде , и проблема в том, что функция getId()
не может вернуть NULL, если я применяю int тип возврата. Это TypeErrors, даже без включена жесткая типизация:
Fatal error: Uncaught TypeError: Return value of ExampleClass::getId() must be of the type integer, null returned
Я считал не устанавливая тип возвращаемого намека на этот геттер, но потом я понял, что проблема, вероятно, не возвращаемый тип намекая, но тот факт, что я используя смешанные типы возврата. Я помню, где-то читал, что использование смешанных типов возврата - это плохо, но я не уверен, как справиться с этим, не используя смешанные типы возврата. Я мог бы:
- Выбросьте исключение в геттере и создайте проверку в классе сопоставления, чтобы он поймал это исключение.
- Поймайте исключение TypeError и используйте это, чтобы указать, что идентификатор не установлен.
- Сделайте объект id открытым, поэтому я могу позвонить isset прямо на это.
- Добавить другой метод
hasId() return isset($this->id)
Честно говоря, не очень, как и любой из этих решений, и мне было интересно, если есть лучший вариант. Какова наилучшая практика для подобных случаев?
Кроме того, не должен ли я получать TypeError только в том случае, если включена строгая типизация? Я думал, что PHP7 по умолчанию «слабые подсказки».
try 'int?' As return-type – tkausl
@tkausl Это реализовано? Я не знал об этой функции (это не в документации PHP), но я нашел [этот RFC] (https://wiki.php.net/rfc/nullable_types) (типы с нулевым значением). Это то, о чем вы говорите? Если это так, это проект, ориентированный на PHP 7.1. – Compizfox
О ... Я был уверен, что видел это где-то, но не знал, где, извините. – tkausl