程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php require 在類的繼承中的坑

php require 在類的繼承中的坑

編輯:關於PHP編程

 對於php的文件調用,我們有時會為使用include, include_once, require, require_once而陷入斟酌,不僅初學者如此,高級工程是由也會有糾結的時候。而且至今使用哪一個為最優仍沒有達成共識。每個團隊每個項目有自己的代碼規范,也有自己的使用理由。至於四個函數的異同,在此不作贅述。

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

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

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

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


[php]
AbstractClass.php 

AbstractClass.php<?phpabstract class AbstractClass{}

  再實現兩個子類:


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

RequireClassA.php

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

}

 

 

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

RequireClassB.php

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


  實現調用:

 

[php]
test.php 
 
<?php 
require_once 'RequireClassB.php'; 
require_once 'RequireClassA.php'; 
$A = new RequireClassA(); 
$B = new RequireClassB(); 

test.php

<?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

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved