两个类之间的区别__construct()

两个类之间的区别__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'); 
+3

手册:[构造函数和析构函数](http://php.net/manual/en/language.oop5.decon.php) –

+1

构造函数简单地定义创建对象时的第一个和所需的行为 – Kazz

+0

您看不到差异?!一个在施工时传递参数,另一个在后面传给另一个实例方法。非常明显的差异IMO。你可能想澄清为什么你认为没有什么不同。 – deceze

您的两个示例确实可能看起来相同,但仅从单一(您的,现在)的角度来看。


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是该类的一个字段,而不仅仅是一个回声方法?在你明确地设置它之前,它的价值是什么?

为确保字段被初始化并在可以使用对象之前完成设置,请使用构造函数。如果你不需要初始化,你不一定需要写一个显式的构造函数。

+0

好吧,我现在明白了......我想....但我如果你想写一个小例子来更好地理解它。非常感谢你! –

+0

@ΜάνοςΑρβανίτης我没写过PHP,所以我希望避免编写代码。我不希望我介绍的任何错误进一步混淆局面。你有多少研究对象的使用和创造?如果你刚开始,构造函数的目的可能不明显。一旦你开始写更复杂的对象,它应该变得更清晰。你发布的例子的问题是首先使用类没有意义。该方法可能不过是一个纯粹的功能。 – Carcigenicate

+0

试图从首先滥用类的代码中得出关于类操作的结论是毫无用处的。 – Carcigenicate