производительность — Какой более быстрый подход к проверке типов в PHP? gettype () или множественное число _ * ()

В PHP, который динамически типизирован, мы можем создавать функции, которые могут принимать несколько типов данных в качестве параметров. Затем мы можем работать с данными в зависимости от типа переменной. Есть два способа сделать это:

Подход первый:

function doSomething1($param) {
$type = gettype($param);
if ($type === 'string') {
// do something
}
else if ($type === 'integer') {
// do something
}
else if ($type === 'array') {
// do something
}
}

Подход второй:

function doSomething2($param) {
if (is_string($param)) {
// do something
}
else if (is_int($param)) {
// do something
}
else if (is_array($param)) {
// do something
}
}
  1. Насколько я знаю, эти два подхода функционально эквивалентны с точки зрения тестирования, но, поскольку PHP имеет так много ошибок, я должен спросить, есть ли что-то, что я мог бы пропустить, если я предпочитаю один подход по сравнению с другим?

  2. С точки зрения производительности, правильно ли сказать, что подход один быстрее, чем два, потому что Вызовы функций PHP стоят дорого? Или gettype() гораздо более дорогая операция, чем индивидуальная is_*() функции?

  3. Есть ли какие-либо идиомы / руководства по стилю кодирования по этому поводу?

Обновить
Из моего теста, использующего PHP 7.0.4, миллион итераций doSomething2() потребовалось 159 мс, чуть меньше половины времени doSomething1() на 315 мс. Это было независимо от того, была ли передана строка (первая проверка) или массив (последняя проверка). gettype() это действительно дорогая операция и более дорогая, чем несколько вызовов функций с использованием is_*(),

Любой, кто лучше понимает, почему это так, будет признателен за вашу помощь.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]