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

是的PHP define() 任何不同于只是创造一个var?

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

vs

$setting = 0;  
$something = $setting;
有帮助吗?

解决方案

'定义'操作本身是相当缓慢的确通过xdebug分析器。

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

  • 纯'定义'
    380.785获取/秒
    14.2647意味着毫秒/第一反应

  • 常量的定义与'hidef'延伸
    930.783获取/秒
    6.30279意味着毫秒/第一反应


断开链接更新

博文引用上述已经离开了互联网。它仍然可以被看 在这里,通过机韦巴克.这里是另一个 类似的文章.

该图书馆提交人引用可以找到 在这里(apc_define_constants)在这里(hidef扩).

其他提示

一般来说,常量的想法是在程序常量,(听起来很有趣,对吧?;))。这意味着编译器(解释器)将替换“FOOBAR”。在整个剧本中使用FOOBAR的价值。

理论和优势太多了 - 如果你编译的话。现在PHP非常动态,在大多数情况下你不会注意到不同,因为PHP脚本是在每次运行时编译的。除非你使用像这样的字节码缓存,否则你不应该看到常量和变量之间的速度存在显着差异。 APC Zend Optimizer eAccelerator 。然后它才有意义。

此处已经注明了常量的所有其他优点/缺点,可以在 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

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

这里有差异,从 手册

  • 常量没有一美元sign($)之前,他们;
  • 常量可能仅仅被定义使用的定义()功能,不能通过简单的分配;
  • 常量的可能定义和在任何地方进行访问,而不考虑变量范围的规则;
  • 常量可能不能重新界定或不确定,一旦他们已经设置;和
  • 常量只能评价标值。

对我来说,主要的好处是全球范围。我当然不用担心他们的效率使用他们,只要你需要一个全球标的价值,这应该不可改变的.

看来效率不高。 (我在这里根据php.net的一条评论做出所有假设,我自己还没有做过基准测试。)

召回一个常数,将召回一个变量的时间是2倍。

检查常量的存在将需要2ms和12ms的误报!

以下是php在线文档中定义页面评论的基准。

  

在使用defined()之前,请查看以下基准:

true                                       0.65ms
$true                                      0.69ms (1)
$config['true']                            0.87ms
TRUE_CONST                                 1.28ms (2)
true                                       0.65ms
defined('TRUE_CONST')                      2.06ms (3)
defined('UNDEF_CONST')                    12.34ms (4)
isset($config['def_key'])                  0.91ms (5)
isset($config['undef_key'])                0.79ms
isset($empty_hash[$good_key])              0.78ms
isset($small_hash[$good_key])              0.86ms
isset($big_hash[$good_key])                0.89ms
isset($small_hash[$bad_key])               0.78ms
isset($big_hash[$bad_key])                 0.80ms
  

PHP Version 5.2.6,Apache 2.0,Windows XP

     

每个语句执行1000次,而开销时间为12ms   1000个电话不会让最终用户撕掉他们的头发,   与if(true)比较时,它确实会产生一些有趣的结果:

     

1)if($ true)几乎相同2)if(TRUE_CONST)差不多   慢两倍 - 我猜这个替换不是在编译时完成的   时间(我不得不仔细检查这一个!)3)定义()慢3倍   如果常量存在4)define()是19 TIMES SLOWER如果   常数不存在! 5)isset()无论如何都非常有效   你扔的是什么(对于任何实现数组的人来说都是好消息   驱动事件系统 - 我!)

     

可能要避免if(已定义('DEBUG'))...

来自tris + php at tfconsulting dot com dot au 26-Mar-2009 06:40

http://us.php.net/manual/en/ function.defined.php#89886

定义是简单的静态意义,意味着它的值在运行时不能改变,而变量是动态意义的,因为你可以在整个过程中自由地操纵它的值。

主要的差异:

  • 定义是恒定变量是变量
  • 他们不同的范围和可见性

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

不确定效率,但很多创建一个var:

  • 这是一个恒定:你不能确定或重新分配这一设置。
  • 如果该定义没有找到,$的东西被设定为"设定",这是有用的,例如,在i18n:如果一个翻译缺失(即。相应的定义是本地化的文件),我们看到一个大词以大写形式,很可见...
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top