2014-11-05 106 views
0

宗旨:我希望能夠只使用extends語句擴展任何PHP類和NO需要聲明,如下所示:汽車在PHP需要

<?php 

    class some_child extends some_parent{ 

    } 

?> 

,但目前我必須這樣做:

<?php 

    require_once("some_parent.php"); 

    class some_child extends some_parent{ 

    } 

?> 

只是要注意:

  1. 父類與子
  2. 不在同一文件夾中php.ini已正確設置爲包含父路徑...因此,那很好。

問題 我怎麼做到這一點,即延長而不需要它的父類?

提前道歉,如果這有點不具有建設性,我從來不知道這裏的規則。 TIA

編輯

僅僅是一個可愛的清晰,我正在尋找一個「幕後」的解決方案,希望我能在htaccess的或php.ini中設置的東西不僅包括ncessary文件,但也加載它們,對我來說似乎include_path不會加載該目錄中的類。這就是爲什麼我得到致命的錯誤

最後,我wouldnt構成這個問題,如果我沒有看到它在行動之前。我知道它的可能性,只是尋找一些指導。感謝感謝

+2

你需要使用自動加載器http://php.net/manual/en/language.oop5.autoload.php – 2014-11-05 10:44:28

+2

檢查作曲家,'PSR-0 autoloading'和'classmaps' – revo 2014-11-05 10:44:37

回答

0

所以...是的,回答我自己的問題...這符合我的需要:

,所以我發現,你可以設置一個PHP指令,將自動前插和\或追加一些PHP文件來訪問每一個PHP文件...

這是我做過什麼:

在php.ini

的auto_prepend_file = 「require.php」

require.php包含了我所有的require_once語句...

完美滿足我的需求:)感謝以前的答案。

3

這是我可以告訴你最簡單的版本:

function __autoload($className) { 
     if (file_exists($className . '.php')) { 
      require_once $className . '.php'; 
     } 
     return false; 
} 

你需要考慮到您的帳戶,你的目錄結構來正確地確保您的文件加載。

所以,如果你有一個目錄名爲助手和目錄名爲庫也可能是這樣的:

function __autoload($className) { 

    $directories = array('helpers', 'libraries'); 

    foreach ($directories as $dir) { 
     $path = '/'.$dir.'/'$className . '.php'; 
     if (file_exists($path)) { 
      require_once $path; 
     } 
    } 
} 
+0

所以這將在小孩班是嗎?如果是的話,即時消息試圖消除我添加到子類的代碼量...原因是,如果我有50個孩子延伸相同的父母...我必須每次都必須執行此自動加載....我確定你可以瞭解冗餘。欣賞答案雖然:) – 2014-11-05 11:00:13

+0

不,你只是把它放到它自己的文件,並將其包含在您的應用程序的頂部。你只需要包含一次。 – 2014-11-05 11:02:09

+0

感謝這很簡單:)但它不是100%,有趣的是我對OP,PSR-0的評論......會看看那個。非常感謝大衛 – 2014-11-05 11:03:31

-2

要做到這一點,我認爲是需要在索引中的所有文件,然後運行的最佳方式核心對象。 像這樣:

require_once ("config/config.php"); 
require_once ("config/application_config.php"); 
require_once ("config/database.php"); 

require_once ("system/systemcomponent.php"); 
require_once ("system/program.php"); 


$program = new Program(); 
$program->run(); 

然後你就可以讓你的程序對象做任何你想做你的程序做的! 無需擔心在擴展之前需要任何東西。

更新:

你也可以這樣做。

//get all files in the root directory 
$php_files = scandir ("./"); 

    //take out the "." and ".." directories (used for navigating) 
    for ($i = 0; $i <= 2; $i++) 
     array_splice ($php_files, 0, 1); 

    //Require all found files 
    foreach ($php_files as $file) 
     require_once ($file); 

請注意,它不會吞噬非.php文件。

+1

請看'PHP autoload' http:// php。 net/manual/zh/language.oop5.autoload.php – Xatenev 2014-11-05 13:13:31

+0

我不知道這個功能,非常感謝你通知我。 – Vanitas 2014-11-05 13:30:07