Если вы заранее знаете, что обе переменные относятся к одному и тому же типу, это не будет иметь никакого значения. Я думаю, что разница в скорости настолько незначительна, что аргумент скорости можно (и нужно) полностью игнорировать, и вы должны сосредоточиться на своем приложении, а не на преждевременной (и ненужной) оптимизации.
Однако, если у вас есть требование, что аргумент и должен быть точно таким, как вы ожидаете (например, === 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 миллионов итераций.
Это означает, что одно строгое сравнение ускорит ваш скрипт на 0.00000002 seconds
.
Если вы думаете, что это то, что вы должны учитывать при написании сценария, сделайте это. Но вскоре вы столкнетесь с другими крошечными оптимизациями, которые дадут вам 1000-кратное увеличение скорости и сделают такие «оптимизации» бесполезными. Это учебный случай преждевременной оптимизации.
Опять же, используйте операторы строгого сравнения, если это необходимо, потому что это требование в вашем коде. Не используйте его по соображениям производительности .