您的兩個示例確實可能看起來相同,但僅從單一(您的,現在)的角度來看。
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
,並且從不顯示任何名稱。實際上,如果你因爲某種原因而沒有把目光放在類代碼上(通常的做法是爲每個類指定一個獨特的文件),你甚至可能不知道你可以。
在這兩個例子,我畫了類聲明和使用量之間的註釋行,因爲這是兩個不同的角度(覺得他們甚至可以是兩個不同的人誰也不能互相通信)。作爲課堂作者,您可以將您的約束條件精確地轉換爲您可以生成的最明確的代碼。作爲類的用戶,您不想浪費時間來理解所使用類的複雜性:您希望以最小的複雜度創建對象,以最小的開銷和學習曲線充分利用功能,並繼續使用代碼和業務。
手冊:[構造函數和析構函數](http://php.net/manual/en/language.oop5.decon.php) –
構造函數簡單地定義創建對象時的第一個和所需的行爲 – Kazz
您看不到差異?!一個在施工時傳遞參數,另一個在後面傳給另一個實例方法。非常明顯的差異IMO。你可能想澄清爲什麼你認爲沒有什麼不同。 – deceze