Я пытаюсь оптимизировать код, и мне было интересно, что быстрее преобразовать переменную в логическое значение:
<?php
$a='test';
$result1 = !!$a;
$result2 = (bool)$a;
?>
Я не беспокоюсь о размере кода, просто о времени выполнения.
некоторые тесты здесь, но они очень неубедительны (пробовали несколько раз), поэтому мне интересно, что происходит в исходном коде PHP, чтобы увидеть, обрабатываются ли они по-разному:
<?php
$a = 'test';
for($c=0;$c<3;$c++){
$start = microtime(true);
for($i=0;$i<10000000;$i++){
$result = !!$a;
}
$end = microtime(true);
$delta = $end-$start;
echo '!!: '.$delta.'<br />';
}
$a = 'test';
for($c=0;$c<3;$c++){
$start = microtime(true);
for($i=0;$i<10000000;$i++){
$result = (bool)$a;
}
$end = microtime(true);
$delta = $end-$start;
echo '(bool): '.$delta.'<br />';
}
результат
!!: 0.349671030045
!!: 0.362552021027
!!: 0.351779937744
(bool): 0.346690893173
(bool): 0.36114192009
(bool): 0.373970985413
(bool)$a
значит: взять $a
и приведите его к логическому.
!!$a
значит: взять $a
, приведите его к логическому значению, если оно еще не было, затем возьмите полученное значение и переверните его, затем переверните снова.
Не только (bool)
быстрее, чтобы выполнить (да, я проверил это; нет, вы не заметите никакой разницы, если у вас нет миллионов таких операций), но это намного быстрее для чтения. Если вам нужно привести тип, просто приведите тип; не используйте какой-нибудь «умный» хакерский подход, который, черт возьми, запутает любого, кто должен читать ваш код.
Других решений пока нет …