Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Что лучше возвращать из функции/метода при ошибке


Автор: Gold Dragon 20.9.2012, 10:27
собственно вариантов не так много... 
Код

//......

return false

//......

return null

//......

return 0


Может вопрос и философский, но всё же... Я вот смотрю что PHP переходит на возврат NULL.. тем более есть is_null()

Что думаете?

Автор: Fortop 20.9.2012, 10:46
null - это отсутствие чего-либо.

Если у вас функция/метод не возвращает данные, то достаточно 2х состояний true/false независимо от того была ли ошибка или нет.
Если у вас есть данные, то имеем 3 состояния - данные/нет данных/ошибка

Вместо "нет данных" отлично подходит null или array()
Для ошибки false.



Усложняем.

Считаем что true/false это данные.
Тогда нам нужно как-то сигнализировать об ошибке, поэтому можем использовать третье состояние для этого.


Для методов вообще все просто. throw Exception 
и все.

Автор: Gold Dragon 20.9.2012, 10:56
я сейчас не беру Exception, это совсем другой случай... Я говорю о результате, т.е. Если всё прошло удачно и данные есть то .... Если нет NULL...

Просто хочется узнать что народ больше применяет на практике. С другой стороны что лучше/быстрее/правильнее/красивее проверять? 
Код

if (myFunc === false){}

или 
Код

if (is_null(myFunc)){}


третий вариант наверное менее приветлив ну или более специфичный, т.к. например, есть такие функции которые при правильном ответе возвращают ноль (позиция найденного символа в строке)...

Добавлено через 14 минут и 42 секунды
не выдержал smile Вот маленький тест на скорость, можете посмотреть

Код

for($y = 0; $y < 5; $y++){
    echo 'Тест № ' . $y;
    $sysstart = microtime(true);
    for($i = 0; $i < 100000; $i++){
        $a = false;
        if($a === false){
        }
    }
    echo ' - ' . round((microtime(true) - $sysstart), 5);

    $sysstart = microtime(true);
    for($i = 0; $i < 100000; $i++){
        $a = null;
        if(is_null($a)){
        }
    }
    echo ' - ' . round((microtime(true) - $sysstart), 5);

    $sysstart = microtime(true);
    for($i = 0; $i < 100000; $i++){
        $a = 0;
        if($a === 0){
        }
    }
    echo ' - ' . round((microtime(true) - $sysstart), 5);
    echo '<hr>';
}


Автор: baldina 20.9.2012, 11:11
лучше - что очевидно. false (и тем более null) не самый лучший в мире способ, но так поступает большинство встроенных функций.
так что myFunc === result

Добавлено через 1 минуту и 2 секунды
Цитата(Gold Dragon @  20.9.2012,  10:56 Найти цитируемый пост)
я сейчас не беру Exception

возьми, все упростится

Автор: Gold Dragon 20.9.2012, 11:14
Цитата(baldina @  20.9.2012,  12:11 Найти цитируемый пост)
 но так поступает большинство встроенных функций.

вот в принципе именно с этим и связан мой вопрос

Автор: Чучмек 21.9.2012, 09:19
Цитата(Gold Dragon @  20.9.2012,  10:27 Найти цитируемый пост)
собственно вариантов не так много...

Еще можно -1


Если результат функции не bool, то false



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)