我正在学习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")
答案 0 :(得分:2)
当您在示例中声明一个类时,您不仅要设置它的骨架,而且还要设置它可以是什么。声明应该包含任何内容以及任何内容 - 无论是否总是使用它。
在这种情况下,就像说对象可以有手和手指,但并不是对象的所有实例都会有它们。
虽然PHP允许一些非常有趣的代码(比如第一次为它赋值时创建一个新属性),即使它不是原始对象的一部分,它通常被认为是不好的形式 - 并且几乎不可能稍后跟踪代码中的错误。
我不能强烈建议只使用声明的属性,而不仅仅是动态添加内容。
答案 1 :(得分:1)
这是为了初始化变量并将其明确设置为公共或私有,因此您不必通过代码搜索信息。
变量初始化是许多语言中常见的编程实践。
答案 2 :(得分:1)
他们宣称这些变量是该类的成员。如果在函数内部声明变量,它只存在于函数的命名空间中。该函数结束后,该变量将被删除。声明函数外部允许变量驻留在类的命名空间中,这意味着它们可以被任何类方法的函数访问。
快速编辑:这也意味着变量将固有地绑定到类,因此类的实例将包含这些变量,允许它们通过访问器和更改器可访问和修改。总而言之,对于可靠性和可访问性而言,这是一种非常合理的方法。
答案 3 :(得分:0)
我想我知道你在问什么。这与Scope有关。
传递给构造函数的变量只有在构造函数完成后才可用。要将变量注册为对象的成员,您需要将它们分配给类的参数。因此:
public $name; // called here
public function __construct ($name) {
$this->name = $name;
}
您可以将传递给构造函数的变量命名为您喜欢的任何名称(例如__construct($argument); $this->name = $argument;
)。
您只是告诉构造函数在创建对象时期望变量。将传递给构造函数的变量命名为与属性名相同的常见约定有助于提高可读性,但没有名称冲突,因为构造函数变量不与对象参数共享作用域。这样做的逻辑是更容易理解传递给构造函数的变量将被分配到何处。
所以__construct($name)
和public $name;
($ this-> name)是两个完全独立的内存。
我希望这会有所帮助。我记得试图解决这样的问题是什么感觉。
答案 4 :(得分:0)
您可以在任何地方声明您的成员变量,例如这将有效:
class test {
public function __construct ($name) {
$this->name = $name;
}
public $name; // member variable $name
}
$testing = new test('Hello');
echo $testing->name;
但是,如果将成员变量声明在类的顶部,则更清楚。为什么?因为能够清楚地看到一个类正在使用哪些变量是微不足道的......