PHP常量 - const vs define vs static

时间:2014-11-22 07:27:39

标签: static const constants php-5.5

问题:

  1. const变量无法合并(但我们可以使用常量define来实现此目的。)
  2. define在运行时变慢 - 尤其是当您有定义列表时。
  3. 静态 - 解决方案?

    定义,

    define('prefix','hello');
    define('suffix','world');
    define('greeting',prefix.' '.suffix);
    

    静态的,

    class greeting 
    {
        static public $prefix = 'hello';
        static public $suffix = 'world';
        static public $concat = 'default';
    
        public function __construct()
        {
            self::$concat = self::$prefix.' '.self::$suffix;
        }
    }
    

    问题:

    1. 那么哪一个更快呢?我该如何测试它们?
    2. 为什么在更改greeting默认值之前,我必须创建$concat的实例?(见下文)?
    3. greeting用法:

      var_dump(greeting::$concat);  // default
      
      new greeting(); // I don't even need to store it in a variable like $object = new greeting();
      var_dump(greeting::$concat); // hello world
      

      这很奇怪。我怎么能不制作greeting的实例,但仍能得到正确的结果?

      我有什么想法可以做得更好?

1 个答案:

答案 0 :(得分:3)

静态属性仍然是可变的!你想要的是类常量:

<?php
class greeting
{
    const prefix = 'hello';
    const suffix = 'world';
}

echo greeting::prefix, ' ', greeting::suffix ; 
# Yields: Hello world

如果你有很多常量,你可能想使用serialize()来编写一个缓存文件,并在你的代码中使用unserialize()。根据您的使用案例,open + unserialize()文件可能比PHP runner更快。