2012-06-27 30 views
7

我應該包含/ require_once我在PHP中擴展的父類嗎?在PHP中擴展父類是否需要包含該類的文件?

例如我曾稱爲類形狀

class Shapes { 

} 

然後,我創建了一個名爲

require_once('shapes.php'); 

class Circle extends Shapes { 

} 

如果我需要的時候,我擴展父類的子類?或者應該只是使用將子類擴展到它的父類,即使它們在同一個文件夾中?

+4

你看過自動加載嗎? http://www.php.net/manual/en/language.oop5.autoload.php –

回答

13

您需要做某事爲了讓PHP在處理子類之前看到您的基類定義,否則會發生致命錯誤。

這個東西可以是基類文件的手冊require_onceautoloading(還有其他選項用於自動加載,但spl_autoload_register是您應該使用的選項)。

該方法的使用取決於範圍:編碼一個小的測試項目設置自動加載的時候可能是矯枉過正。但是,隨着代碼庫變大,自動加載變得更有吸引力,因爲:

  • 它可以隱藏複雜的源文件解析邏輯(例如,如果你有一個基類的可配置目錄;還有更高級的方案,以及)
  • 它可以逐步配置:你可以使用它作爲一個鏈條運行多個自動加載機和應用程序的每個獨立的模塊可以註冊與所有其他
2

是的,你有和平共存的獨立的自動加載磁帶機如果該類未在同一文件中聲明,則將其包含在內。

也有一個叫做Autoloading Classes功能,使用它可以創建這樣一個功能:

function __autoload($class){ 
    require_once('classes/' . $class . '.php'); 
} 

,它會自動包括未在現有範圍內發現

而且你班可以讀到這個功能太:autoload_register

1

您還可以使用作曲家簡化程序。

composer.jsonhttps://getcomposer.org/

{ 
... 
    "autoload": { 
     "psr-4": { 
      "": "src/" 
     } 
    }, 
... 
} 

獲取作曲家和運行composer install。 您應該加載一次作曲家的自動加載腳本像

require_once __DIR__ . '/vendor/autoload.php'; 

如果你有PHP小於5.3.0然後用dirname(__FILE__)替換__DIR__

並把您的文件夾src。例如,如果您有類Acme\Utils\FooBar那麼它應該在src/Acme/Utils/FooBar.php

相關問題