2016-08-04 55 views
-2
class global_class extends Timemine 
{ 

    private $DBPrefix = ''; 

    public function __construct() 
    { 
    global $DBPrefix; 

    // Load settings 
    self::loadsettings(); 

    $this->database = $db; 
    $this->DBPrefix = $DBPrefix; 
    . 
    . 

$DBPrefix被宣布为外部私人但在其重新宣布的功能?作为全球。 这是正确的吗? 谢谢。私人申报似乎无效

+0

您的答案是几行。 '$ this-> DBPrefix = $ DBPrefix;'不是“重新声明。”如果没有'$ this',php中的成员永远不会被访问 – alzee

回答

1

$DBPrefix实际上没有重新声明。有两个版本的变量。第一个(private $DBPrefix = '';)是一个成员变量,第二个(global $DBPrefix)是构造函数的本地作用域变量(它引用变量的第三个全局版本,但让我们把它放在一边)。请参阅有关variable scope的PHP文档的更多信息

成员变量的值会被设置为相同的值与该行的局部范围变量:$this->DBPrefix = $DBPrefix;所以这行后两个版本具有相同的价值。从技术上讲,你的代码是正确的。

但是,使用global通常是不好的。在构造函数中通过$DBPrefix可能更好:

public function __construct($DBPrefix) { 

    // Load settings 
    self::loadsettings(); 

    $this->database = $db; 
    $this->DBPrefix = $DBPrefix; 
}