PHP常量 - 常量VS定义VS静态
问题描述:
-
const
变量不能concated(但我们可以做到这一点恒定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
的实例,但仍然可以得到正确的结果?
任何想法,我可以做些什么,使这更好?
答
静态属性仍然可变!你要什么类常量:
<?php
class greeting
{
const prefix = 'hello';
const suffix = 'world';
}
echo greeting::prefix, ' ', greeting::suffix ;
# Yields: Hello world
如果你有很多的常数,你可能需要使用序列化()写一个缓存文件,并在你的代码反序列化()。根据您的使用情况,open + unserialize()文件可能比PHP runner更快。
谢谢我知道,但我需要更短的东西。 'greeting :: saysomething' – laukok 2014-11-22 07:53:12
'const'只接受与评估表达式的'define()'不同的标量数据。 – 2014-11-22 07:59:54