聽說 PHP 使用 strict type hint 會讓速度變慢,於是來做了個簡單的測試,先來個沒有 type hint 的:
<?php
function repeat($str)
{
return $str;
}
$start = microtime(true);
for ($i = 0; $i < 100000000; $i++) {
repeat('test');
}
$end = microtime(true);
var_dump($end - $start);
使用 PHP 7.1.8 執行,大概會花費 3.7 秒左右:
$ php main.php
float(3.713329076767)
接下來改成 strict type 的寫法:
<?php
declare(strict_types=1);
function repeat(string $str): string
{
return $str;
}
$start = microtime(true);
for ($i = 0; $i < 100000000; $i++) {
repeat('test');
}
$end = microtime(true);
var_dump($end - $start);
執行時間大概變成 5.3 秒左右:
$ php main.php
float(5.3128638267517)
的確慢了不少,不過先別著急,不要因為慢了一些就打算放棄 strict type hint。
使用 PHP 5.6 去執行第一個測試 (沒有 strict type) 就大約需要 19 秒:
$ php5.6 main.php
float(19.477375030518)
其實把 PHP 版本升級上 7.x 才是正確的吧 XD