问题:
const
变量无法合并(但我们可以使用常量define
来实现此目的。)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;
}
}
问题:
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
的实例,但仍能得到正确的结果?
我有什么想法可以做得更好?
答案 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更快。