【发布时间】:2011-04-08 21:18:33
【问题描述】:
在使用带有 PHP 的 __autoload() 函数的 OOP 范例的 PHP 项目上工作时,以下哪项被认为是管理独立函数的最佳实践:
(为简洁起见,对所提供的示例进行了简化)
tl;dr:通常如何处理独立函数加载:
- 伪自动加载(例如通过
__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
【问题讨论】:
标签: php function static-libraries autoload