为什么在类中创建变量时不能使用defines
?我该怎么做才能超越这个? (define是表前缀(db))
像这样:
class foo {
public $bar = FOO."bar";
}
这给了我以下错误:
解析错误:语法错误,意外 '。',期待','或';'
答案 0 :(得分:7)
您只能使用常量表达式声明属性。这里,连接运算符是非法的(因此是解析错误),而不是FOO
常量。
public $bar = FOO."bar";
过去的一种方法是在构造函数中初始化它。您仍然可以使用常量,并将其与字符串连接。
class foo {
public $bar;
public function __construct() {
$this->bar = FOO."bar";
}
}
答案 1 :(得分:1)
您可以使用构造函数初始化值:
<?php
define("FOO", "test");
class foo {
public $bar;
function __construct()
{
$this->bar = FOO . "bar";
}
}
var_dump(new foo());
答案 2 :(得分:0)
并不是你不能使用defines
。初始化变量时不能使用运算符。
答案 3 :(得分:0)
如上所述,您无法使用运算符定义类变量,如果值必须是动态的,则赋值必须在函数中进行。
使用常量时,使用类常量而不是在全局范围中定义常量会很有用。它们是使用关键字const
定义的,并使用self::
运算符进行访问。
class foo
{
const BAR = 'test';
public $baz;
public function __construct()
{
$this->baz = self::BAR . 'bat';
}
}
也可以静态地在实例外部访问类常量:foo::BAR
,因此您可以在其他上下文中使用类中的常量,但不会自动作为使用define
定义的常量在全局范围内。
$some_var = foo::BAR;
echo $some_var;
// output: test