5

Это, пожалуй, мучительно основной вопрос, чтобы ответить, но мне интересно, о проблемах с производительностью относительно использования при идентичных!== против если равно!= для управления потоком РНР.

Рассмотрим следующий тривиальный PHP функции:

<?php 
function test_json($json = NULL) { 
    if ($json != NULL) { 
    echo 'You passed some JSON.'; 
    } else { 
    echo 'You failed to pass any JSON.'; 
    } 
} 
?> 

С точки зрения производительности, является предпочтительным использовать при идентичных (!==), чтобы предотвратить PHP переборе типов переменных, пытаясь найти правильное сравнение?

Я предположить, что!==первым сравнивает типы переменных, и если это не удается, она немедленно возвращает FALSE? Я использовал !=, так как PHP3 почти как рефлекс. Теперь, когда я работаю над гораздо более сложными вычислительными проектами, соображения о минимальной производительности становятся все более интересными.

Другие комментарии по оптимизации управления потоком, конечно же, приветствуются!

+1

Когда соображение производительности становится реальной проблемой, попробуйте также профилирование. Это не имеет значения по сравнению с вызовом функции. – mario

+0

@mario Yup. Я просто интересуюсь оператором сравнения, поскольку понятие пришло мне в голову, когда я писал функцию (ставя под сомнение мои привычки). – msanford

ответ

7

Я не сделал каких-либо тестов производительности на свободные против строгих операторов сравнения, но для того, что вы пытаетесь сделать, я бы вместо того, чтобы рекомендовать что-то вроде

if (!is_null($json)) { 
    do_stuff() 
} 

Более подробная информация о is_null() в http://www.php.net/manual/en/function.is-null.php

EDIT: примечание в комментариях на php-странице, с которой я связан выше, имеет некоторые результаты, показывающие, что оператор === немного быстрее, чем оператор ==, оба из которых быстрее, чем is_null(). Однако в другой заметке отмечается, что «разница во времени выполнения между === NULL и is_null составляет менее 250 наносекунд. Идите оптимизировать то, что имеет значение». Я должен согласиться. Итак, все, что сказал, я предлагаю вам пойти с тем, что вы считаете самым читаемым.

+1

+1, Выполнение теста с 1 000 000 сравнений в цикле, сравнивающее значение с 'NULL' ; '==', '===' и 'is_null()', я получаю, что '==' и '===' примерно одинаковы '===' будучи * чуть-чуть быстрее и 'is_null()' заняв в два раза больше времени. Однако, по личному вкусу, я предпочитаю 'is_null()' не меньше, 'NULL == NULL' должен быть ложным (*, но не *), а' is_null() 'фиксирует это понятие. – zrvan

+0

Отличная точка о 'NULL == NULL'. Я, как правило, ошибаюсь на стороне функций, включенных в язык, где это возможно по этой точной причине: они, вероятно, будут правильно обрабатывать странные угловые случаи, о которых я никогда бы не подумал, а это значит меньше отладки позже. –

+0

Отличные очки. Всем спасибо! – msanford