PHP中定义的效率如何?

时间:2020-03-06 14:52:09  来源:igfitidea点击:

C ++预处理器#define完全不同。

PHPdefine()与仅创建var有什么不同吗?

define("SETTING", 0);  
$something = SETTING;

$setting = 0;  
$something = $setting;

解决方案

这是与手册的区别

  • 常量前面没有美元符号($);
  • 只能使用define()函数来定义常量,而不能通过简单的赋值来定义;
  • 常量可以在任何地方定义和访问,而无需考虑变量作用域规则。
  • 设置常量后,不得重新定义或者取消定义常量。和
  • 常数只能计算为标量值。

对我来说,主要的好处是全球范围。我绝对不用担心它们的效率,只要我们需要一个不可更改的全局标量值,就可以使用它们。

主要区别:

  • 定义是常量,变量是变量
  • 他们的范围/可见度不同

不确定效率,但不仅仅是创建变量:

  • 这是一个常数:我们无法重新定义或者重新分配此设置。
  • 如果找不到定义,则将$ something设置为" SETTING",例如在i18n中很有用:如果缺少翻译(即对应的定义是本地化文件),则在大写,很明显...

通常,常量的概念是程序内的常量(听起来很有趣,对吗?;)。这意味着在整个脚本中,编译器(解释器)将用FOOBAR的值替换" FOOBAR"。

如果我们进行编译,那么对于理论和优点来说就太重要了。现在,PHP非常动态,在大多数情况下,我们不会注意到任何不同,因为PHP脚本是在每次运行时编译的。除非我们使用APC,Zend Optimizer或者eAccelerator等字节码缓存,否则Afai-can-tell不会在常量和变量之间看到明显的速度差异。那就有意义了。

常量的所有其他优点/缺点已在此处指出,可以在PHP手册中找到。

当我运行速度测试时,设置和转储常量的速度比设置变量并将其转储快得多。

php > $cat='';$f=microtime(1);$s='cowcow45';$i=9000;while ($i--){$cat.='plip'.$s.'cow';}echo microtime(1)-$f."\n";

0.00689506530762

php > $cat='';$f=microtime(1);define('s','cowcow45');$i=9000;while ($i--){$cat.='plip'.s.'cow';}echo microtime(1)-$f."\n";

0.00941896438599

这是可重复的,具有相似的结果。在我看来,常量的定义和/或者使用要比变量慢一些。

xdebug分析器确认'define'操作本身的速度很慢。

这是来自http://t3.dotgnu.info/blog/php/my-first-php-extension.html的基准:

  • 纯的'define'380.785 fetchs / sec 14.2647平均msecs / first-response
  • 用'hidef'扩展名930.783定义的常数fetchs / sec 6.30279平均毫秒/第一响应

断开的链接更新

上面引用的博客文章已经离开了互联网。仍可以通过Wayback Machine在此处查看。这是另一篇类似的文章。

作者引用的库可以在此处(apc_define_constants)和此处(hidef扩展)中找到。