При возврате значений в php считается хорошей или плохой практикой возвращать смешанные типы данных. Я работаю над проектом, где я постоянно сталкиваюсь с методами, которые возвращают номер id или null
. Я обрабатываю значение null
, проверяя значение null
и возвращаю -1
если оно равно null
.
Другая ситуация, в которой я нахожусь во многом, – это метод, который должен что-то сделать и вернуть строку. Но иногда невозможно вернуть строку, поскольку она не была найдена или произошло исключение. Что лучше делать здесь? Вернуть строку как «не удалось» или что-то еще? Я думаю, тогда это создает связывание строк между методами, поскольку вызывающий метод должен точно знать сообщение о сбое строки для проверки?
EDIT: Хорошо, есть несколько разных мнений. Мне нравится идея вернуть false при неудаче и фактический результат независимо от того, какой тип данных имеет успех. Но … есть ли лучшая практика, когда дело доходит до этого? Я имею в виду, что делают программисты на других языках, т.е. java и c ++ и т. Д. В этих ситуациях?
То, что я обычно делаю, это если метод работал, возвращать значение, и если он не смог вернуть FALSE. Это то, что делают многие встроенные методы PHP. Итак, вы можете просто проверить, вернулась ли функция FALSE или нет.
Я считаю, что неправильная практика возвращает смешанные типы данных. Возможно, как вы указали, но подумайте о читаемости и ремонтопригодности вашего кода. Убедитесь, что вы прокомментируете, что вы возвращаете, и почему, я думаю, это будет самым важным. Если вы ожидаете возвращения int и вы возвращаете -1 вместо null, прокомментируйте это, чтобы вы (или кто-то еще) не сходили с ума, пытаясь понять, что вы пытались сделать.
Null – это довольно распространенное возвращаемое значение, указывающее на отсутствие возвращаемого значения. Вы должны вернуть значение null (не «failed», или -1), если функция вообще не хочет возвращать идентификатор.
Если исключительным является то, что идентификатор не найден, вы должны выбросить исключение.
Возвращение смешанного типа плохое, по крайней мере, сегодня в 2013 году. Бум! Путь к тому, чтобы разделить это:
BAD, смешанный тип типа возврата:
function checkResult($data) { if ($data) { ... return $stuff; } else { return false; } }
Людям потребуется дополнительная логика для работы checkRsult (), и они никогда точно не узнают, какой тип вернется.
ХОРОШИЙ, четко фиксированный тип возвращаемого типа:
Может быть, пример не очень хороший, но он показывает путь.
function doesResultExist($data) { if ($data) { return true; } // default return return false; } function getResultData() { ... return $stuff; }
Я согласен с ответами выше.
Однако, если вы разрабатываете целую систему, «наилучшей практикой» будет использование исключений: всегда возвращайте что-то значимое, а в случае аномалии генерируйте исключение. Затем вызывающий может иметь дело с ситуациями, которые он знает, с которыми сталкивается, и пусть кто-то выше поймает остальных.
Функция, возвращающая смешанные значения, не считается плохим. На самом деле это красота php, это динамический язык. Поэтому нужно сделать это, чтобы вернуть false при ошибке и требуемое значение, если функция выполняется правильно.
if( false == ( $data = do_something() ) ) return false; else print_r( $data );