php require 在類的繼承中的坑

2021-06-14 00:08:55 字數 1314 閱讀 3609

對於php的檔案呼叫,我們有時會為使用include, include_once, require, require_once而陷入斟酌,不僅初學者如此,高階工程是由也會有糾結的時候。而且至今使用哪乙個為最優仍沒有達成共識。每個團隊每個專案有自己的**規範,也有自己的使用理由。至於四個函式的異同,在此不作贅述。

我們團隊推崇使用的是require_once,為什麼使用require_once而不是require呢。今日給出乙個理由。

require的使用在多個子類繼承同乙個父類時會引起redeclare的錯誤

因為require不是乙個方法,而是乙個語句塊。所以,他把把引用的檔案執行一遍,所以,如果你在乙個檔案裡引用了兩個繼承自同一父類的類時,由會引起上述問題。而require_once則不會,它會先判斷是否引用過,苦有則略過。

看**,先寫乙個抽象父類:

abstractclass.php
<?phpabstract class abstractclass{}

再實現兩個子類:

requireclassa.php

<?php

//使用require而不是require_once

require 'abstractclass.php';

class requireclassa extends abstractclass

requireclassb.php

<?php

//使用require而不是require_once

require 'abstractclass.php';class requireclassb extends abstractclass{}

實現呼叫:

test.php

<?php

require_once 'requireclassb.php';

require_once 'requireclassa.php';

$a = new requireclassa();

$b = new requireclassb();

執行test.php報錯

>php test.php 

>php fatal error: cannot redeclare class abstractclass in /home/john/workspace/php/require/abstractclass.php on line 2

PHP require和include的區別不同

在php中,include和require的作用比較容易混淆。下面我以乙個經典例子來深刻說明它們的區別。當我們經常訪問乙個資料庫時,可以把連庫語句寫成乙個檔案 con db.php dbh mysql connect localhost mysql select db admreqs 在實際應用時,...

PHP require和include的區別

require乙個檔案存在錯誤的話,那麼程式就會中斷執行了,並顯示致命錯誤 include乙個檔案存在錯誤的話,那麼程式不會中端,而是繼續執行,並顯示乙個警告錯誤。以下為補充 1.include有返回值,而require沒有。2.include 包括並執行指定檔案 在處理失敗時include 產生乙...

類在繼承類的同時實現多介面

介面和類之間可以通過實現產生關係,同時類與類之間可以通過繼承產生關係。當乙個類已經繼承了乙個父類,它又需要擴充套件額外的功能,這時介面就派上用場了。子類通過繼承父類擴充套件功能,通過繼承擴充套件的功能都是子類應該具備的基礎功能。如果子類想要繼續擴充套件其他類中的功能呢?這時通過實現介面來完成。cla...