PHP版本:PHP 7.2.9
先后采用传统PHP风格 和 PHP7.X以后的强类型函数风格执行一段逻辑相同的测试代码
按预期应该是强类型版本的代码性能更高,可是实际执行时间确实传统风格的版本更短
传统风格的:
<?php
class Normal {
public $data = 0;
public function func1($a, $aa, $aaa, $aaaa) {
$this->data += $a;
$this->data += $aa;
$this->data += $aaa;
$this->data += $aaaa;
return $this->data;
}
public function func2($b, $bb, $bbb, $bbbb) {
$this->data += $b;
$this->data += $bb;
$this->data += $bbb;
$this->data += $bbbb;
return $this->data;
}
public function func3($c, $cc, $ccc, $cccc) {
$this->data += $c;
$this->data += $cc;
$this->data += $ccc;
$this->data += $cccc;
return $this->data;
}
public function getData() {
return $this->data;
}
}
$obj = new Normal();
$val = 0;
for($i = 1; $i < 500000; ++$i) {
$val += $obj->func1($i, $i+1, $i+2, $i+3);
$val += $obj->func2($i, $i+1, $i+2, $i+3);
$val += $obj->func3($i, $i+1, $i+2, $i+3);
}
echo $val;
echo "\ndone\n";
强类型的:
<?php
class Normal {
public $data = 0;
public function func1(int $a, int $aa, int $aaa, int $aaaa): int {
$this->data += $a;
$this->data += $aa;
$this->data += $aaa;
$this->data += $aaaa;
return $this->data;
}
public function func2(int $b, int $bb, int $bbb, int $bbbb): int {
$this->data += $b;
$this->data += $bb;
$this->data += $bbb;
$this->data += $bbbb;
return $this->data;
}
public function func3(int $c, int $cc, int $ccc, int $cccc): int {
$this->data += $c;
$this->data += $cc;
$this->data += $ccc;
$this->data += $cccc;
return $this->data;
}
public function getData(): int {
return $this->data;
}
}
$obj = new Normal();
$val = 0;
for($i = 1; $i < 500000; ++$i) {
$val += $obj->func1($i, $i+1, $i+2, $i+3);
$val += $obj->func2($i, $i+1, $i+2, $i+3);
$val += $obj->func3($i, $i+1, $i+2, $i+3);
}
echo $val;
echo "\ndone\n";
传统版本:
0m0.402s
0m0.404s
0m0.422s
0m0.399s
0m0.411s
强类型版本:
0m0.395s
0m0.351s
0m0.462s
0m0.472s
0m0.438s
我理解是PHP在解释代码的过程中当需要解释执行一个函数,如果有参数,作为弱类型语言会在解释的过程中生成若干不同参数类型的机器码, 而如果用强类型的方式指定了类型,就会生成唯一的机器码
因此我也在测试方法中采用了4个参数
然而
好像并没有拉开差距, 甚至平均下来还不如普通版本
是我的方式有问题吗?
潇湘沐
凤凰求蛊
UYOU
BIG阳