OOP不能在变量中使用define

时间:2010-12-18 22:46:34

标签: php oop class variables

为什么在类中创建变量时不能使用defines?我该怎么做才能超越这个? (define是表前缀(db))

像这样:

class foo {
    public $bar = FOO."bar";
}

这给了我以下错误:

  

解析错误:语法错误,意外   '。',期待','或';'

4 个答案:

答案 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