sel*_*lar 48 php const class constants
我知道你可以使用字符串连接以彼此的方式创建全局常量:
define('FOO', 'foo');
define('BAR', FOO.'bar');
echo BAR;
Run Code Online (Sandbox Code Playgroud)
将打印'foobar'.
但是,我在使用类常量尝试执行相同操作时遇到错误.
class foobar {
const foo = 'foo';
const foo2 = self::foo;
const bar = self::foo.'bar';
}
Run Code Online (Sandbox Code Playgroud)
foo2的定义没有问题,但声明const bar会出错
解析错误:语法错误,意外'.',期待','或';'
我也尝试过使用像sprintf()这样的函数,但它不像左边的paren那样比字符串连接符'.'.
那么有没有什么方法可以创建类常量,而不是像foo2那样简单的设置案例?
use*_*291 34
唯一的方法是定义()一个表达式,然后在类中使用该常量
define('foobar', 'foo' . 'bar');
class Foo
{
const blah = foobar;
}
echo Foo::blah;
Run Code Online (Sandbox Code Playgroud)
另一个选择是去bugs.php.net并请他们解决这个问题.
Tre*_*her 22
Imho,这个问题值得回答PHP 5.6+,感谢@jammin 评论
从PHP 5.6开始,您可以为常量定义静态标量表达式:
class Foo {
const BAR = "baz";
const HAZ = self::BAR . " boo\n";
}
Run Code Online (Sandbox Code Playgroud)
虽然它不是问题的一部分,但应该意识到实施的局限性.以下内容不起作用,虽然它是静态内容(但可能在运行时被操作):
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 ';'
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请查看:https://wiki.php.net/rfc/const_scalar_exprs 和http://php.net/manual/en/language.oop5.constants.php
归档时间: |
|
查看次数: |
22480 次 |
最近记录: |