在PHP中,類別名稱與方法名稱可以相同,如果方法名稱和類別名稱相同,且沒有“__construct”,那麼該方法會被當作建構子。 php建構函數是類別中的一個特殊函數,當使用new操作符建立一個類別的實例時,建構函數將會自動呼叫。
本教學操作環境:windows7系統、PHP7.1版,DELL G3電腦
建構子
#__construct ( mixed ...$values = "" ) : void
PHP 允許開發者在一個類別中定義一個方法作為建構子。具有建構函式的類別會在每次建立新物件時先呼叫此方法,所以非常適合在使用物件之前做一些初始化工作。
注意: 如果子類別中定義了建構子則不會隱式呼叫其父類別的建構子。要執行父類別的建構函數,需要在子類別的建構子中呼叫 parent::__construct()。如果子類別沒有定義建構函式則會如同一個普通的類別方法一樣從父類別繼承(假如沒有被定義為 private 的話)。
範例#1 繼承中的建構子
<?php class BaseClass { function __construct() { print "In BaseClass constructor\n"; } } class SubClass extends BaseClass { function __construct() { parent::__construct(); print "In SubClass constructor\n"; } } class OtherSubClass extends BaseClass { // 继承 BaseClass 的构造函数 } // In BaseClass constructor $obj = new BaseClass(); // In BaseClass constructor // In SubClass constructor $obj = new SubClass(); // In BaseClass constructor $obj = new OtherSubClass(); ?>
與其它方法不同,當__construct() 被與父類別__construct() 具有不同參數的方法覆寫時, PHP 不會產生一個E_STRICT 錯誤訊息。
自 PHP 5.3.3 起,在命名空間中,與類別名稱同名的方法不再作為建構子。不使用命名空間中的類別則不受影響。建構函式是一個普通的方法,在對應物件實例化時會自動被呼叫。因此可以定義任何數量的參數,可以是必選、可以有型別、可以有預設值。構造器的參數放在類別名稱後的括號裡呼叫。
範例 #2 使用建構器參數
<?php class Point { protected int $x; protected int $y; public function __construct(int $x, int $y = 0) { $this->x = $x; $this->y = $y; } } // 两个参数都传入 $p1 = new Point(4, 5); // 仅传入必填的参数。 $y 会默认取值 0。 $p2 = new Point(4); // 使用命名参数(PHP 8.0 起): $p3 = new Point(y: 5, x: 4); ?>
如果一個類別沒有建構函數,以及建構函數的參數不是必填項時,括號就可以省略。
推薦學習:《PHP影片教學》
以上是PHP中與類別名稱相同的方法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!