日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
php中有沒有構造函數

本文操作環(huán)境:Windows7系統(tǒng)、php7.1版、DELL G3電腦

為嘉陵等地區(qū)用戶提供了全套網頁設計制作服務,及嘉陵網站建設行業(yè)解決方案。主營業(yè)務為做網站、網站設計、嘉陵網站設計,以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

php中有沒有構造函數?

php 構造函數

__construct(mixed ...$values = ""): void

PHP 允許開發(fā)者在一個類中定義一個方法作為構造函數。具有構造函數的類會在每次創(chuàng)建新對象時先調用此方法,所以非常適合在使用對象之前做一些初始化工作。

注意: 如果子類中定義了構造函數則不會隱式調用其父類的構造函數。要執(zhí)行父類的構造函數,需要在子類的構造函數中調用 parent::__construct()。如果子類沒有定義構造函數則會如同一個普通的類方法一樣從父類繼承(假如沒有被定義為 private 的話)。

示例 #1 繼承中的構造函數

與其它方法不同, __construct() 在繼承時不受簽名兼容性規(guī)則的約束。

自 PHP 5.3.3 起,在命名空間中,與類名同名的方法不再作為構造函數。不使用命名空間中的類則不受影響。 構造函數是一個普通的方法,在對應對象實例化時自動被調用。 因此可以定義任何數量的參數,可以是必選、可以有類型、可以有默認值。 構造器的參數放在類名后的括號里調用。

示例 #2 使用構造器參數

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 8.0.0 之前,全局命名空間內的類如果有一個同名的方法,則會解析為舊式風格的構造器。 雖然函數能被當作構造器,但該語法已被廢棄,并會導致 E_DEPRECATED 錯誤。 如果 __construct() 和同名方法同時存在時, 會調用 __construct()。

以下兩種情況時,與類同名的方法不再有特殊意義:命名空間中的類、PHP 8.0.0 起的任何類。

新代碼中要使用 __construct()。

構造器屬性提升

PHP 8.0.0 起,構造器的參數也可以相應提升為類的屬性。 構造器的參數賦值給類屬性的行為很普遍,否則無法操作。 而構造器提升的功能則為這種場景提供了便利。 因此上面的例子可以用以下方式重寫:

示例 #3 使用構造器屬性提升


當構造器參數帶訪問控制(visibility modifier)時,PHP 會同時把它當作對象屬性和構造器參數, 并賦值到屬性。 構造器可以是空的,或者包含其他語句。 參數值賦值到相應屬性后執(zhí)行正文中額外的代碼語句。

并非所有參數都需要提升??梢曰旌咸嵘虿惶嵘齾底鳛閷傩?,也不需要按順序。 提升后的參數不影響構造器內代碼調用。

注意:

對象屬性的類型不能為 callable 以避免為引擎帶來混淆。 因此提升的參數也不能是 callable。 其他任意 類型聲明 是允許的。

注意:

放在構造器提升參數里的屬性會同時復制為屬性和參數。

Static 創(chuàng)造方法

在 PHP 中每個 class 只能有一個構造器。 然而有些情況下,需要用不同的輸入實現不同的方式構造對象。 這種情況下推薦使用 static 方法包裝構造。

示例 #4 使用 static 創(chuàng)造方法

id = $id;
        $this->name = $name;
    }
    public static function fromBasicData(int $id, string $name): static {
        $new = new static($id, $name);
        return $new;
    }
    public static function fromJson(string $json): static {
        $data = json_decode($json);
        return new static($data['id'], $data['name']);
    }
    public static function fromXml(string $xml): static {
        // 自定義代碼邏輯。
        $data = convert_xml_to_array($xml);
        $new = new static();
        $new->id = $data['id'];
        $new->name = $data['name'];
        return $new;
    }
}
$p1 = Product::fromBasicData(5, 'Widget');
$p2 = Product::fromJson($some_json_string);
$p3 = Product::fromXml($some_xml_string);

可以設置構造器為 private 或 protected,防止自行額外調用。 這時只有 static 方法可以實例化一個類。 由于它們位于同一個定義的 class 因此可以訪問私有方法,也不需要在同一個對象實例中。 當然構造器不一定要設置為 private,是否合理取決于實際情況。

三個 static 方法展示了對象以不同方式的實例化方式。

  • fromBasicData() 把所需的全部參數傳入構造器,創(chuàng)建對象并返回結果。

  • fromJson() 接受 JSON 字符串,,預處理成構造器所需的格式,然后返回新的對象。

  • fromXml() 接受 XML 字符串并解析,然后創(chuàng)建一個單純的對象。 由于參數都是可選的,使得可以忽略所有參數去調用構造器。然后為對象的屬性賦值后返回結果。

在以上三個例子中,static 關鍵詞會被翻譯成代碼所在類的類名。 這個例子中是 Product。


分享標題:php中有沒有構造函數
網頁URL:http://www.5511xx.com/article/djhiosi.html