私人声明似乎无效

时间:2016-08-04 07:25:32

标签: php

class global_class extends Timemine
{

  private $DBPrefix = '';

  public function __construct()
  {
    global $DBPrefix;

    // Load settings
    self::loadsettings();

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

$DBPrefix在外面被声明为私有,但在函数内部重新声明?全球化。 它是否正确? 谢谢。

1 个答案:

答案 0 :(得分: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;
}