php require 在類的繼承中的坑_PHP教程

來源:互聯網
上載者:User
 對於php的檔案調用,我們有時會為使用include, include_once, require, require_once而陷入斟酌,不僅初學者如此,進階工程是由也會有糾結的時候。而且至今使用哪一個為最優仍沒有達成共識。每個團隊每個項目有自己的代碼規範,也有自己的使用理由。至於四個函數的異同,在此不作贅述。

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

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

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

  看代碼,先寫一個抽象父類:


[php]
AbstractClass.php

AbstractClass.php

  再實現兩個子類:


[php]
RequireClassA.php

//使用require而不是require_once
require 'AbstractClass.php';
class RequireClassA extends AbstractClass{

}

RequireClassA.php

//使用require而不是require_once
require 'AbstractClass.php';
class RequireClassA extends AbstractClass{

}

[php]
RequireClassB.php

//使用require而不是require_once
require 'AbstractClass.php';class RequireClassB extends AbstractClass{}

RequireClassB.php

//使用require而不是require_once
require 'AbstractClass.php';class RequireClassB extends AbstractClass{}


  實現調用:

[php]
test.php

require_once 'RequireClassB.php';
require_once 'RequireClassA.php';
$A = new RequireClassA();
$B = new RequireClassB();

test.php

require_once 'RequireClassB.php';
require_once 'RequireClassA.php';
$A = new RequireClassA();
$B = new RequireClassB();

  運行test.php報錯
[plain]
>php test.php
>PHP Fatal error: Cannot redeclare class AbstractClass in /home/john/workspace/php/require/AbstractClass.php on line 2

>php test.php
>PHP Fatal error: Cannot redeclare class AbstractClass in /home/john/workspace/php/require/AbstractClass.php on line 2

http://www.bkjia.com/PHPjc/477515.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/477515.htmlTechArticle對於php的檔案調用,我們有時會為使用include, include_once, require, require_once而陷入斟酌,不僅初學者如此,進階工程是由也會有糾結的時候。...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.