php强类型判断在什么时候,PHP7函数采用强类型后为什么性能没有提升,反而下降了?...

题目描述

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";

执行时间(执行5次):

传统版本:

0m0.402s

0m0.404s

0m0.422s

0m0.399s

0m0.411s

强类型版本:

0m0.395s

0m0.351s

0m0.462s

0m0.472s

0m0.438s

我理解是PHP在解释代码的过程中当需要解释执行一个函数,如果有参数,作为弱类型语言会在解释的过程中生成若干不同参数类型的机器码, 而如果用强类型的方式指定了类型,就会生成唯一的机器码

因此我也在测试方法中采用了4个参数

然而

好像并没有拉开差距, 甚至平均下来还不如普通版本

是我的方式有问题吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值