一個PHP項目,需要使用PHP的__autoload()
功能,以下被認爲是管理的獨立功能的最佳實踐的OOP模式的優點工作時:提供自動加載功能的最佳實踐
(例子是簡化爲簡潔)
TL的緣故;博士:如何單機功能加載常用的處理:
- 僞自動加載(通過
__callStatic
魔例如)[選項1]- 抽象輔助類分組的靜態方法[選項2]
- 替代
還要注意,我已經發布了一個與選項1有關的參數/參考問題的相關問題,可以在這裏找到:__callStatic(), call_user_func_array(), references, and PHP 5.3.1
鑑於index.php
:
function __autoload($class){
require $class . '.class.php';
}
選項1;一個抽象類Core
(或Library
,或任何),該 「自動加載」 功能:
## Core.class.php
abstract class Core{
public static function __callStatic($function, $arguments){
if(!function_exists($function)){
require $function . '.function.php';
}
return call_user_func_array($function, $arguments);
}
}
## SayHello.function.php
function sayHello(){
echo 'Hello';
}
## SayGoodbye.function.php
function sayGoodbye(){
echo 'Goodbye';
}
## index.php
Core::sayHello(); // Hello
Core::sayGoodbye(); // Goodbye
選項2;將相關功能集成到抽象的「幫手」類被靜態調用:
## SayStuff.class.php
abstract class SayStuff{
public static function sayHello(){
echo 'Hello';
}
public static function sayGoodbye(){
echo 'Goodbye';
}
}
## index.php
SayStuff::sayHello(); // Hello
SayStuff::sayGoodbye(); // Goodbye
**感謝rATRIJS; **我也在思考這些問題,這可能會嚴重影響遞歸函數。隨着時間的推移,我寫了很多函數,基本上擴展了PHP的核心功能,雖然有些可能用在給定的項目中,但有些不會。將它們劃分爲邏輯組(類別)是很困難的,因爲它們的一般性,然而這是我仍在考慮的選項。作爲一個單一的大型圖書館,每次加載它們都不是最佳的(我不認爲),因爲當我完成整合我的圖書館時,它會變得非常龐大。 – Dan 2011-04-09 00:59:41
我在「選項1」中注意到的另一個問題是帶參數傳遞的參數的函數,當然根本不工作。已經忘記了這個警告。 – Dan 2011-04-09 01:47:51