为什么这些变量在被分配给任何东西之前就被写入了


Why are these variables written before being assigned to anything?

我正在学习PHP,所以请耐心等待。这两个类在使用之前都设置了一个公共或私有变量。为什么会这样?

  class test {
    public $name; // called here
    public function __construct ($name) {
        $this->name = $name;
     }
  }
  $testing = new test('Hello');
  echo $testing->name;

和:

class db_link {
  private $link; // called here
  public function __construct ($database_name) {
   $link = mysql_connect ("localhost", "your_user_name", "your_password");
   mysql_select_db ($database_name, $link);
   $this -> link = $link;
   }
  function query ($sql_query) {
   $result = mysql_query ($sql_query, $this -> link);
   return $result;
   }
  function __destruct() {
   mysql_close ($this -> link);
   }
  }
 $db = new db_link ("MyDB")
 $result = $db->query ("Select * from MyTable")

当你像在你的例子中那样声明一个类时,你不仅要设置它的骨架,还要设置它可以是什么。声明应该真正包括对象内部的任何东西-无论它是否总是被使用。

在这种情况下,这就像是说对象可以有手和手指,但并不是所有对象的实例都会有它们。

尽管PHP允许一些非常有趣的代码(比如第一次给它赋值时创建一个新属性),即使它不是原始对象的一部分,但它通常被认为是糟糕的形式,并且使得以后几乎不可能跟踪代码中的错误。

我非常强烈地建议只使用已声明的属性,而不仅仅是动态添加内容。

这是为了初始化变量并显式地将其设置为public或private,这样您就不必在代码中搜寻信息。

变量初始化是许多语言中常见的编程实践。

他们将这些变量声明为类的成员。如果在函数内部声明变量,则该变量仅存在于函数的命名空间中一旦该函数结束,变量就会被删除。声明函数的外部允许变量驻留在类的命名空间中,这意味着作为类的方法的任何函数都可以访问它们。

快速编辑:这也意味着变量将固有地绑定到类,因此类的实例将包含这些变量,使它们可以通过访问器和赋值器进行访问和修改。总而言之,这是一个非常可靠和可访问的方法。

您可以在任何地方声明您的成员变量,例如,这将起作用:

class test {
    public function __construct ($name) {
        $this->name = $name;
     }
    public $name; // member variable $name
  }
  $testing = new test('Hello');
  echo $testing->name;

但是,如果在类的顶部声明成员变量,则会更加清楚。为什么?因为能够清楚地看到一个类正在使用什么变量是微不足道的。。。

我想我知道你在问什么。这与范围有关。

传递给构造函数的变量只有在构造函数函数完成之前才可用。要将变量注册为对象的成员,需要将它们分配给类的参数。因此:

public $name; // called here
public function __construct ($name) {
    $this->name = $name;
 }

您可以随意命名传递给构造函数的变量(例如__construct($argument); $this->name = $argument;)。

实际上,您只是告诉构造函数在创建对象时需要一个变量。为提高可读性,通常将传递给构造函数的变量命名为与属性名称相同的名称,但由于构造函数变量与对象参数不共享作用域,因此不存在名称冲突。这样做的逻辑是更容易理解传递给构造函数的变量将被分配到哪里。

因此CCD_ 2和CCD_。

我希望这能有所帮助。我记得我试着去理解这样的事情是什么感觉。