两者之间的区别 类 __construct()
Difference between two classes __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');
在这个人为的例子中,第二个很好。
如果 name
是 class 的一个字段而不只是一个回显的方法怎么办?在您明确设置之前它的价值是多少?
要确保在使用对象之前初始化字段并完成设置,请使用构造函数。如果不需要初始化,则不一定需要编写显式构造函数。
你的两个例子可能看起来确实是等同的,但只是从一个(你现在的)角度来看。
class Person { // First case : using the constructor
public function __construct($person) {
echo $person;
}
}
// ----------------------------------------------------------------
$person = new Person('Name');
在这个例子中,你非常清楚class Person
(或其子class之一)的每个对象必须一创建就给一个名字。在任何时候都不会出现没有名字的 Person
。这是您选择强加给自己(如果您打算创建 class Person
的对象)或其他人的设计约束,如果您以某种方式共享您的代码。如果有人试图违反这一约束,PHP 将挂起并显示一条明确的 error/warning 消息。 (演示: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');
这是一个不同的野兽:您可以创建 class Person
的对象,并且可以显示名称。您还可以创建一个 Person
并且根本不显示名称。实际上,如果您出于某种原因没有关注 class 代码,您甚至可能不知道自己可以做到(给每个 class 一个不同的文件是常见的做法)。
在这两个例子中,我在class声明和用法之间画了一条注释线,因为这是两个不同的角度(认为他们甚至可以是两个无法相互交流的不同人)。作为 class 的作者,您可以将约束精确地转换为您可以生成的最明确的代码。作为 class 用户,您不想浪费时间了解您正在使用的 class 的复杂性:您希望创建复杂度最低的对象,以最少的开销和学习利用功能曲线,继续您的代码和业务。
我无法理解什么是 __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');
在这个人为的例子中,第二个很好。
如果 name
是 class 的一个字段而不只是一个回显的方法怎么办?在您明确设置之前它的价值是多少?
要确保在使用对象之前初始化字段并完成设置,请使用构造函数。如果不需要初始化,则不一定需要编写显式构造函数。
你的两个例子可能看起来确实是等同的,但只是从一个(你现在的)角度来看。
class Person { // First case : using the constructor
public function __construct($person) {
echo $person;
}
}
// ----------------------------------------------------------------
$person = new Person('Name');
在这个例子中,你非常清楚class Person
(或其子class之一)的每个对象必须一创建就给一个名字。在任何时候都不会出现没有名字的 Person
。这是您选择强加给自己(如果您打算创建 class Person
的对象)或其他人的设计约束,如果您以某种方式共享您的代码。如果有人试图违反这一约束,PHP 将挂起并显示一条明确的 error/warning 消息。 (演示: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');
这是一个不同的野兽:您可以创建 class Person
的对象,并且可以显示名称。您还可以创建一个 Person
并且根本不显示名称。实际上,如果您出于某种原因没有关注 class 代码,您甚至可能不知道自己可以做到(给每个 class 一个不同的文件是常见的做法)。
在这两个例子中,我在class声明和用法之间画了一条注释线,因为这是两个不同的角度(认为他们甚至可以是两个无法相互交流的不同人)。作为 class 的作者,您可以将约束精确地转换为您可以生成的最明确的代码。作为 class 用户,您不想浪费时间了解您正在使用的 class 的复杂性:您希望创建复杂度最低的对象,以最少的开销和学习利用功能曲线,继续您的代码和业务。