我正在学习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_。
我希望这能有所帮助。我记得我试着去理解这样的事情是什么感觉。