PHP 構造方法 construct

2021-10-24 10:12:22 字數 2169 閱讀 7550

php 構造方法 __construct() 允許在例項化乙個類之前先執行構造方法。

構造方法是類中的乙個特殊方法。當使用 new 操作符建立乙個類的例項時,構造方法將會自動呼叫,其名稱必須是 __construct() 。

在乙個類中只能宣告乙個構造方法,而是只有在每次建立物件的時候都會去呼叫一次構造方法,不能主動的呼叫這個方法,所以通常用它執行一些有用的初始化任務。該方法無返回值。

語法:

function __construct(arg1,arg2,...)

例子:

<?php

class person

function say()

}$p1=new person("張三", 20);

$p1->say();

?>

執行該例子,輸出:

我的名字叫:張三

的年齡是:20

在該例子中,通過構造方法對物件屬性進行初始化賦值。

php 不會在本類的構造方法中再自動的呼叫父類的構造方法。要執行父類的構造方法,需要在子類的構造方法中呼叫 parent::__construct() 。

php 析構方法 __destruct() 允許在銷毀乙個類之前執行執行析構方法。

與構造方法對應的就是析構方法,析構方法允許在銷毀乙個類之前執行的一些操作或完成一些功能,比如說關閉檔案、釋放結果集等。析構函式不能帶有任何引數,其名稱必須是 __destruct() 。

語法:

function __destruct()

我們在上面的例子中加入下面的析構方法:

//定義乙個析構方法

function __destruct()

再次執行該例子,輸出:

我的名字叫:張三

我的年齡是:20

再見張三

和構造方法一樣,php 不會在本類中自動的呼叫父類的析構方法。要執行父類的析構方法,必須在子類的析構方法體中手動呼叫 parent::__destruct() 。

試圖在析構函式中丟擲乙個異常會導致致命錯誤。

在 php4 版本中,構造方法的名稱必須與類名相同,且沒有析構方法。

在php中,子類extends繼承了父類,當子類和父類同時存在建構函式__construct先執行哪子類的建構函式還是父類的建構函式呢? 還有乙個問題就是:子類既然已經繼承了父類,那麼為什麼還要用parent::__construct來呼叫父類的 建構函式呢? 我的意思是既然子類繼…展開

最佳答案

php5.0 以上版本對類的功能進行了很大的擴充。類的建構函式統一命名為__construct()。

子類的建構函式名也是__construct()(也是廢話)。

在子類裡父類的建構函式會不會執行,分兩種情況:

1,如子類不定義建構函式 __construct(),則父類的建構函式缺省會被繼承下來,且會自動執行。

2,如子類定義了建構函式 __construct(),因為建構函式名也是__construct(),所以子類的建構函式實際上是覆蓋(override)了父類的建構函式。這時執行的是該子類的建構函式。

所以子類在繼承父類後,會擁有父類的屬性和方法,這是繼承的特性。子類在建構函式會首先呼叫父類的建構函式來例項化父類的屬性,然後呼叫子類的建構函式,一般你不寫,並不表示沒有呼叫,而是首先呼叫了父類的無參建構函式,如果父類的某些屬性需要在父類建構函式中特殊例項化,則你必須顯示的呼叫父類的有參建構函式,這樣保證子類屬性的完整性。

追問

大師,

子類的建構函式覆蓋了父類的建構函式,那麼父類的__construct()被覆蓋了應該不存在呢。然後parent::__construct怎麼又可以呼叫呢

追答

當子類寫了建構函式,那麼子類的建構函式就會覆蓋父類的建構函式。如果子類沒有寫建構函式,而是parent::__construct這樣的話只會繼承父類的,而不會覆蓋父類。

如果是想既繼承父類的建構函式又想寫自己的建構函式,那麼就用parent::__construct,如果不想繼承父類的建構函式,那就子類重新定義乙個建構函式吧。

PHP 構造方法 construct

php 構造方法 construct 允許在例項化乙個類之前先執行構造方法。構造方法是類中的乙個特殊方法。當使用 new 操作符建立乙個類的例項時,構造方法將會自動呼叫,其名稱必須是 construct 在乙個類中只能宣告乙個構造方法,而是只有在每次建立物件的時候都會去呼叫一次構造方法,不能主動的呼...

PHP 構造方法 construct

php 構造方法 construct 允許在例項化乙個類之前先執行構造方法。構造方法是類中的乙個特殊方法。當使用 new 操作符建立乙個類的例項時,構造方法將會自動呼叫,其名稱必須是 construct 在乙個類中只能宣告乙個構造方法,而是只有在每次建立物件的時候都會去呼叫一次構造方法,不能主動的呼...

php構造方法 函式 基礎

什麼是建構函式呢?在回答這個問題之前,我們來看乙個需求 我們在建立人類的物件時,是先把乙個物件建立好後,再給他的年齡和姓名屬性賦值,如果現在我要求,在建立人類的物件時,就指定這個物件的年齡和姓名,該怎麼做?面試題 這裡可以說成建構函式的作用就是用來完成屬性的初始化 建構函式的基本介紹 基本語法 cl...