2014-11-22 73 views
1

问题:PHP常量 - 常量VS定义VS静态

  1. const变量不能concated(但我们可以做到这一点恒定define)。
  2. define运行时速度变慢 - 特别是当您有一个定义列表时长的定义列表。

静态 - 解决方案?

定义,

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(请参阅下文)?

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的实例,但仍然可以得到正确的结果?

任何想法,我可以做些什么,使这更好​​?

回答

3

静态属性仍然可变!你要什么类常量:

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

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

如果你有很多的常数,你可能需要使用序列化()写一个缓存文件,并在你的代码反序列化()。根据您的使用情况,open + unserialize()文件可能比PHP runner更快。

+0

谢谢我知道,但我需要更短的东西。 'greeting :: saysomething' – laukok 2014-11-22 07:53:12

+0

'const'只接受与评估表达式的'define()'不同的标量数据。 – 2014-11-22 07:59:54