两个类之间的区别__construct()
我不明白什么是__construct()。我不能看到这两个例子之间的差异:两个类之间的区别__construct()
1)
class Person {
public function __construct($person) {
echo $person;
}
$person = new Person('Name');
2)
class Person {
public function name($name) {
echo $name;
}
}
$person = new Person();
$person->name('Name');
您的两个示例确实可能看起来相同,但仅从单一(您的,现在)的角度来看。
class Person { // First case : using the constructor
public function __construct($person) {
echo $person;
}
}
// ----------------------------------------------------------------
$person = new Person('Name');
在这个例子中,你非常清楚的是Person
类(或子类之一)的每一个对象都必须尽快它创建一个名字。在任何时候都不会有没有名字的Person
。如果您以某种方式共享您的代码,那么您选择强加给自己的设计约束(如果您打算创建类Person
的对象)或其他设计约束。如果有人试图违反这个约束,PHP将挂起一个明确的错误/警告消息。 (演示:https://3v4l.org/hCXZ8)
class Person { // Second case : no constructor (equivalent to an empty constructor)
public function name($name) {
echo $name;
}
}
// ----------------------------------------------------------------
$person = new Person();
$person->name('Name');
这是一个不同的野兽:你可以创建Person
类的一个对象,你可以显示一个名称。您也可以创建一个Person
,并且从不显示任何名称。实际上,如果你因为某种原因而没有把目光放在类代码上(通常的做法是为每个类指定一个独特的文件),你甚至可能不知道你可以。
在这两个例子,我画了类声明和使用量之间的注释行,因为这是两个不同的角度(觉得他们甚至可以是两个不同的人谁也不能互相通信)。作为课堂作者,您可以将您的约束条件精确地转换为您可以生成的最明确的代码。作为类的用户,您不想浪费时间来理解所使用类的复杂性:您希望以最小的复杂度创建对象,以最小的开销和学习曲线充分利用功能,并继续使用代码和业务。
在这种人为的例子,第二个是细。
如果name
是该类的一个字段,而不仅仅是一个回声方法?在你明确地设置它之前,它的价值是什么?
为确保字段被初始化并在可以使用对象之前完成设置,请使用构造函数。如果你不需要初始化,你不一定需要写一个显式的构造函数。
好吧,我现在明白了......我想....但我如果你想写一个小例子来更好地理解它。非常感谢你! –
@ΜάνοςΑρβανίτης我没写过PHP,所以我希望避免编写代码。我不希望我介绍的任何错误进一步混淆局面。你有多少研究对象的使用和创造?如果你刚开始,构造函数的目的可能不明显。一旦你开始写更复杂的对象,它应该变得更清晰。你发布的例子的问题是首先使用类没有意义。该方法可能不过是一个纯粹的功能。 – Carcigenicate
试图从首先滥用类的代码中得出关于类操作的结论是毫无用处的。 – Carcigenicate
手册:[构造函数和析构函数](http://php.net/manual/en/language.oop5.decon.php) –
构造函数简单地定义创建对象时的第一个和所需的行为 – Kazz
您看不到差异?!一个在施工时传递参数,另一个在后面传给另一个实例方法。非常明显的差异IMO。你可能想澄清为什么你认为没有什么不同。 – deceze