2016-09-14 57 views
-2

这是我的代码:在php类中变量是一个等于二的变量?

class Config { 
static public $site = 'http://localhost/site/'; 
static public $style = $site . 'css/style.css'; 

// ... 
} 

这不是为我工作。我得到白色屏幕。

class Config { 
    static public $site = 'http://localhost/site/'; 
    static public $style = 'http://localhost/site/css/style.css'; 

    // ... 
    } 

这是工作。我得到设计和代码。工作得很好。我的问题是为什么?

+0

你能回应'$ style'并与我们分享吗? – Mureinik

+2

[PHP文档](http://php.net/manual/en/language.oop5.properties.php) - '这个声明可能包含一个初始化,但是这个初始化必须是一个常量值 - 也就是说,它必须能够在编译时进行评估,并且不能依赖运行时信息进行评估。“....任何非常量值的串联,其性质是运行时评估 –

+0

也不会$网站。 'css/style.css';''无论如何都是有效的;它需要是'self :: $站点。 'css/style.css';' –

回答

0

这是不可能的:

static public $style = $site . 'css/style.css'; 

表达式不能用于初始化类的值。只允许不变的值。这是您在构造函数中必须执行的操作,但由于它们是静态值,因此无法保证在您尝试访问这些静态值之前该对象将被初始化。

class foo { 
    public $foo = 1; // ok 
    public $bar = 1+1; // ok only in PHP 5.6+ 
    public $baz = $this . $that; // not valid in any version of PHP 

唯一一次你可以使用表达式(在PHP5.6 +)是如果结果值可以在编译时计算。所以1+1没问题,因为可以在编译时处理。但$this . $that只能在运行时确定,因此是非法的。

+0

我明白了。谢谢。也许那样更好。 –