2016-08-04 58 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; 
}