函数的返回值是否会影响 PHP 中的性能?
Does returning values from functions affect performance in PHP?
我们来看看这个class和方法:
class Test {
protected $storage;
public function rng() {
$random = random_bytes(100);
$this->storage = $random;
}
}
正在使用 PHP7 的 random_bytes() 函数计算一些随机字节,结果未返回;它仅存储在 属性.
中
让我们看一下上述方法的一个稍微不同的版本:
class Test {
protected $storage;
public function rng() {
$random = random_bytes(100);
$this->storage = $random;
return $random;
}
}
这回有结果了。我想知道返回值时是否会影响性能。
测试脚本#1:没有返回值
<?php
class Test {
protected $storage;
public function rng() {
$random = random_bytes(100);
$this->storage = $random;
}
}
$instance = new Test;
$start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
$instance->rng();
}
$end = microtime(true);
$diff = $end - $start;
printf('Not returning: %.25f', $diff);
print PHP_EOL;
测试脚本 #2:返回值
<?php
class Test {
protected $storage;
public function rng() {
$random = random_bytes(100);
$this->storage = $random;
return $random;
}
}
$instance = new Test;
$start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
$instance->rng();
}
$end = microtime(true);
$diff = $end - $start;
printf('Returning: %.25f', $diff);
print PHP_EOL;
结果:
$ php -f functions-returning-values-benchmark.php
Not returning: 0.0937850475311279296875000
$ php -f functions-returning-values-benchmark.php
Not returning: 0.0939409732818603515625000
$ php -f functions-returning-values-benchmark.php
Not returning: 0.0953028202056884765625000
$ php -f functions-returning-values-benchmark.php
Returning: 0.0947949886322021484375000
$ php -f functions-returning-values-benchmark.php
Returning: 0.0930099487304687500000000
$ php -f functions-returning-values-benchmark.php
Returning: 0.0935621261596679687500000
结论
没有性能影响。
在 AWS Debian Jessie t2.micro 实例上测试(1vCore,1 GiB RAM)运行 PHP 7.0.7.
我们来看看这个class和方法:
class Test {
protected $storage;
public function rng() {
$random = random_bytes(100);
$this->storage = $random;
}
}
正在使用 PHP7 的 random_bytes() 函数计算一些随机字节,结果未返回;它仅存储在 属性.
中让我们看一下上述方法的一个稍微不同的版本:
class Test {
protected $storage;
public function rng() {
$random = random_bytes(100);
$this->storage = $random;
return $random;
}
}
这回有结果了。我想知道返回值时是否会影响性能。
测试脚本#1:没有返回值
<?php
class Test {
protected $storage;
public function rng() {
$random = random_bytes(100);
$this->storage = $random;
}
}
$instance = new Test;
$start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
$instance->rng();
}
$end = microtime(true);
$diff = $end - $start;
printf('Not returning: %.25f', $diff);
print PHP_EOL;
测试脚本 #2:返回值
<?php
class Test {
protected $storage;
public function rng() {
$random = random_bytes(100);
$this->storage = $random;
return $random;
}
}
$instance = new Test;
$start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
$instance->rng();
}
$end = microtime(true);
$diff = $end - $start;
printf('Returning: %.25f', $diff);
print PHP_EOL;
结果:
$ php -f functions-returning-values-benchmark.php
Not returning: 0.0937850475311279296875000
$ php -f functions-returning-values-benchmark.php
Not returning: 0.0939409732818603515625000
$ php -f functions-returning-values-benchmark.php
Not returning: 0.0953028202056884765625000
$ php -f functions-returning-values-benchmark.php
Returning: 0.0947949886322021484375000
$ php -f functions-returning-values-benchmark.php
Returning: 0.0930099487304687500000000
$ php -f functions-returning-values-benchmark.php
Returning: 0.0935621261596679687500000
结论
没有性能影响。
在 AWS Debian Jessie t2.micro 实例上测试(1vCore,1 GiB RAM)运行 PHP 7.0.7.