что медленнее или быстрее в PHP: if (@ $ myvar ['test'] === null) или if (! isset ($ myvar ['test'])) - PullRequest
0 голосов
/ 09 сентября 2010

Интересно, что медленнее или быстрее:

if( @$myvar['test'] === null ) { .. }

или

if( !isset( $myvar['test'] )) { .. }

Также интересно, если вы подавите предупреждение или уведомление с помощью @, это замедлит оценку?

Спасибо за ваш ответ!

PS: Дело не в разнице, я знаю, что isset проверяет, установлен ли элемент, а не пуст ли он или нет. Но в моем случае важно знать только, пусто ли оно.

Ответы [ 6 ]

4 голосов
/ 09 сентября 2010

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

3 голосов
/ 10 сентября 2010
<?
$myvar = array();

$start = microtime(true);
for($x=0;$x<100000;$x++){

    if( @$myvar['test'] === null ) { }

}
$end = microtime(true);
$duration = $end-$start;
printf("Test 1: %s \n", $duration);


$start = microtime(true);
for($x=0;$x<100000;$x++){

    if( !isset( $myvar['test'] )) {  }

}
$end = microtime(true);
$duration = $end-$start;
printf("Test 2: %s \n", $duration);

// populate 
$myvar['test'] = true;

$start = microtime(true);
for($x=0;$x<100000;$x++){

    if( @$myvar['test'] === null ) { }

}
$end = microtime(true);
$duration = $end-$start;
printf("Test 3: %s \n", $duration);


$start = microtime(true);
for($x=0;$x<100000;$x++){

    if( !isset( $myvar['test'] )) {  }

}
$end = microtime(true);
$duration = $end-$start;
printf("Test 4: %s \n", $duration);

Результат:
Тест 1: 0,18865299224854
Тест 2: 0,012698173522949
Тест 3: 0,11134600639343
Тест 4: 0,015975952148438

2 голосов
/ 09 сентября 2010

Подавление предупреждений с помощью @ замедляет работу. isset() должен быть путь сюда.

0 голосов
/ 10 сентября 2010

в PHP это не имеет значения

0 голосов
/ 09 сентября 2010

Кроме того, я помню, как читал совет, в котором утверждается, что строгое тестирование с === на самом деле немного быстрее, чем ==

0 голосов
/ 09 сентября 2010

Только один способ узнать наверняка - проверить это.

...