我知道您可以使用字符串连接彼此创建全局常量:
define('FOO', 'foo'); define('BAR', FOO.'bar'); echo BAR;
将打印’foobar’。
但是,尝试使用类常量执行相同操作时遇到错误。
class foobar { const foo = 'foo'; const foo2 = self::foo; const bar = self::foo.'bar'; }
foo2的定义没有问题,但是声明const bar会出错
解析错误:语法错误,意外的“。”,期望为“,”或“;”
我也尝试过使用sprintf()之类的函数,但它比字符串连接器’。’更不喜欢左括号。
那么,除了像foo2这样的琐碎的设置情况之外,还有什么方法可以彼此创建类常量吗?
从PHP 5.6开始,您可以为常量定义静态标量表达式:
class Foo { const BAR = "baz"; const HAZ = self::BAR . " boo\n"; }
尽管这不是问题的一部分,但应该意识到实施的局限性。以下内容不起作用,尽管它是静态内容(但可以在运行时进行操作):
class Foo { public static $bar = "baz"; const HAZ = self::$bar . " boo\n"; } // PHP Parse error: syntax error, unexpected '$bar' (T_VARIABLE), expecting identifier (T_STRING) or class (T_CLASS) class Foo { public static function bar () { return "baz";} const HAZ = self::bar() . " boo\n"; } // PHP Parse error: syntax error, unexpected '(', expecting ',' or ';'