【发布时间】:2018-12-05 13:36:55
【问题描述】:
从 php 5.5 开始有一个功能可以使用 class 常量中内置的魔法来获取具有完整命名空间的类名。例如
<?php
namespace Something\Obscenely\Long\Hard\To\Type;
class MyClass {
}
echo MyClass::class;
// Output: Something\Obscenely\Long\Hard\To\Type\MyClass
?>
这里是文档和 RFC 的链接 http://php.net/oop5.basic#language.oop5.basic.class.class https://wiki.php.net/rfc/class_name_scalars
问题是:
例如,如果我使用 Zend Framework 2,它被称为具有巨大 php 数组配置的框架,如果我在此配置解析方法中使用 ::class 的每个类名,而不是像字符串 '' 这样键入的全名-是否会对性能产生重要影响?
例如:
'controllers' => [
'invokables' => [
'\Controller\Monitor' => 'Import\Controller\MonitorController',
...
对
'controllers' => [
'invokables' => [
'\Controller\Monitor' => MonitorController::class,
...
UPD:
我自己的测试
我编写简单的快速测试来进行基准测试
class MyClass
{
}
class MyClass1
{
}
class MyClass2
{
}
class MyClass3
{
}
/**
* run many iteration loop for test percentage
*/
function testString()
{
$results = [];
for ($i = 0; $i < 150000; $i++) {
$results[] = [
'controllers' => [
'invokables' => [
'\Controller\Monitor' => 'Import\Controller\MonitorController',
'\Controller\Monitor2' => 'Import\Controller\MonitorController2',
'\Controller\Monitor3' => 'Import\Controller\MonitorController3',
'\Controller\Monitor4' => 'Import\Controller\MonitorController4',
]
]
];
}
return $results;
}
function testClass()
{
$results = [];
for ($i = 0; $i < 150000; $i++) {
$results[] = [
'controllers' => [
'invokables' => [
'\Controller\Monitor' => MyClass::class,
'\Controller\Monitor2' => MyClass1::class,
'\Controller\Monitor3' => MyClass2::class,
'\Controller\Monitor4' => MyClass3::class,
]
]
];
}
return $results;
}
$token = Benchmark::start('testString');
testString();
Benchmark::end($token);
$token = Benchmark::start('testClass');
testClass();
Benchmark::end($token);
exit();
和结果类似
testString
215335.203125 Kbytes
Time: 0.2604 Seconds
testClass
215337.1640625 Kbytes
Time: 0.2508 Seconds
我们可以看到::class 更快。使用最新的 php5.6 运行。
这是真的吗?
附:这不是如何测量 PHP 代码的重复,因为:
- 在搜索引擎中没有我要询问的信息。
我不知道如何在这个问题的上下文中衡量性能, 因为对于这种情况,运行基准测试还不够且困难。
在实际项目中更改数千行代码并不简单 配置文件。
- 我想要更详细的答案 - 不仅是数字,还有 还有为什么?
【问题讨论】:
-
你为什么不做简单的测试?
-
真正的项目配置文件中的数千行代码只是为了测试而更改并不简单
标签: php performance zend-framework2