我有一些php,它需要生成一个脚本。它的一部分是静态的,但是数据是动态生成的。一段时间前,我在另一种语言中遇到了类似的问题,并使用常量替代解决了这个问题。
我想做的是:
interface IConstants {
const SUBSTITUTE = '!substitute';
const FULL_STRING = 'var data = "' . self::SUBSTITUTE . '";';
}
class Util {
public static function replace($haystack, $needle, $replace) {
// implementation
}
}
class SampleClass {
public function getScript() {
$someData = $this->getData();
return Util::replace(IConstants::FULL_STRING, IConstants::SUBSTITUTE, $someData);
}
public function getData() {
// generate $someData
return $someData;
}
}这个设计是否为PHP所接受?如果是的话,我会如何实施?若否,怎样才是合适的选择?
发布于 2014-08-26 08:33:04
在5.6之前的PHP版本中,您不能这样做。从这些版本的PHP中的组成部分构建常量的唯一方法是使用versions ()。我必须查找一下才能确定,但我认为您不能使用interface()来定义类/接口常量。
从PHP5.6开始,您将能够定义这样的常量,但前提是它们是用其他常量定义的。
发布于 2014-08-26 08:32:38
这在PHP中是不可能的,至少在5.4.4中是不可能的,这与Java不同。
文档说:
该值必须是一个常量表达式,而不是(例如)变量、属性、数学运算的结果或函数调用。
一个简单的尝试如下:
$ php -r 'const FOOBAR = "AF" . "A". "R"; '
PHP Parse error: syntax error, unexpected '.', expecting ',' or ';' in Command line code on line 1通过以下方式:
$ php --version
PHP 5.4.4-14+deb7u14 (cli) (built: Aug 21 2014 08:36:44)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies对于全局常量,可以使用定义。
发布于 2014-08-26 08:32:56
替换发生在字符串上,因此被接受。但是,您所收到的错误是由于PHP缺少常量表达式。即。不能编写使用另一个常量的常量。唯一被接受的语法是当第二个常量等于第一个常量时。
这种情况已经发生了变化,但只在最新的PHP5.6中发生了变化,它还不稳定:http://php.net/manual/en/migration56.new-features.php#migration56.new-features.const-scalar-exprs
https://stackoverflow.com/questions/25500653
复制相似问题