一尘不染

我可以使用字符串连接在PHP中定义类CONST吗?

php

我知道您可以使用字符串连接彼此创建全局常量:

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这样的琐碎的设置情况之外,还有什么方法可以彼此创建类常量吗?


阅读 312

收藏
2020-05-29

共1个答案

一尘不染

从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 ';'
2020-05-29