Ответ 1
Если вы заранее знаете, что обе переменные одного типа, то это не будет иметь никакого значения. Я думаю, что разница в скорости настолько ничтожна, что аргумент скорости может (и должен) полностью игнорироваться, и вам следует сосредоточиться на своем приложении, а не сосредоточиться на преждевременной (и ненужной) оптимизации.
Однако, если у вас есть требование, что и аргумент должен быть именно тем, что вы ожидаете (например, === false
, когда вы не хотите, чтобы 0
прошел тест равенства), используйте ===
или !==
.
Как упоминалось в Headshota, если вы работаете с объектами, то ===
проверяет, что две переменные фактически указывают на один и тот же экземпляр объекта, тогда как ==
пытается сопоставить их по значению, что может привести к неожиданным результатам и следует использовать с большой осторожностью. Здесь будет использоваться строгий оператор, потому что это означает что-то для приложения.
Чтобы ответить на ваш вопрос, если в вашем конкретном контексте некоторые люди используют ===
или !==
, где вы знаете, что обе переменные имеют один и тот же (скалярный) тип, то я предполагаю, что это просто вопрос стиля кодирования, и показывает немного строгости в коде, обеспечивая идею, что обе переменные одного типа, возможно, не с учетом производительности.
Строгие операторы должны использоваться, когда это означает что-то для этого, а не как оптимизация производительности.
Обновить: чтобы ответить на аргумент скорости, рассмотрим этот небольшой тест:
$a = "test";
$b = "test";
$t = microtime(true);
for ($i=0; $i<1e6; $i++) {
($a == $b);
// (100x the equality test, omitted for clarity purposes,
// to lower the speed impact of the loop itself)
($a == $b);
}
printf('%.3f', microtime(true)-$t);
Я грубо получаю:
6.6 seconds for ==
4.3 seconds for ===
Теперь, если я использую $b = 1;
для принудительного неявного преобразования, я получаю грубо:
4.4 seconds for ==
2.4 seconds for ===
В обоих случаях это означает примерно 2-секундный прирост. Вы можете подумать, и в какой-то мере вы будете правы, что это демонстрация преимущества скорости оператора строгого сравнения. Но не забывайте, что мы говорим о 1e6 * 100
= 100 миллионов итераций.
Это означает, что одно строгое сравнение ускорит ваш script на 0.00000002 seconds
.
Если вы думаете, что это то, что вы должны учитывать при написании своего script, тогда сделайте это. Но вы скоро столкнетесь с другими крошечными оптимизациями, которые дадут вам 1000-кратное увеличение скорости и сделают такие "оптимизации" бесполезными. Это случай учебника преждевременной оптимизации.
Опять же, используйте строгие операторы сравнения, если это необходимо, потому что это требование в вашем коде. Не используйте его по соображениям производительности.