首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Autoloading函数最佳实践

Autoloading函数最佳实践
EN

Stack Overflow用户
提问于 2011-04-08 21:18:33
回答 2查看 2K关注 0票数 3

在使用PHP的__autoload()函数利用OOP范式的PHP项目时,以下哪个被认为是管理独立函数的最佳实践:

(为简洁起见,简化了所提供的例子)

tl;dr:独立的函数加载是如何处理的:

  • pseudo-autoloading (例如,通过__callStatic魔术)选项1
  • abstract助手类分组静态方法选项2
  • an alternative

还请注意,我已经发布了一个有关选项1__的参数/引用问题的相关问题,在这里可以找到:

index.php**:**给出的

代码语言:javascript
复制
function __autoload($class){
    require $class . '.class.php';
}

"autoloads“函数的抽象Core Library**,类(或类):**

代码语言:javascript
复制
## 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;将相关函数分组为要静态调用的抽象“助手”类:

代码语言:javascript
复制
## 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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-08 23:36:40

我不会使用“选项1”,主要是因为它使用的是call_user_func*,直接调用函数的速度要慢一些。

如果您只需要一些没有真正结合在一起的帮助函数,那么我可能会包含一个文件helpers.php,它只包含一个没有封装在静态类中的所有助手函数的列表,因为在这种情况下,封装并没有真正达到任何目的。大多数情况下,每个请求都将使用助手函数,因此在每个请求中包含此文件不会造成任何损害……

票数 1
EN

Stack Overflow用户

发布于 2011-04-08 21:54:37

我在这里没有看到一个确切的问题,但由于标题包含“最佳实践”,下面是我最近发现的一个建议:

It seems to be preferable to use PHP's instead of (关于“大卫解剖”博客的一个很好的例子)。

引用链接的博客文章:

使用SPL版本的最大好处(我迄今可以看到)是:

  • 可以使用/注册多个函数--将函数链接在一起,然后依次使用,直到一个函数加载类文件为止。+函数也可以实时取消注册。spl_autoload_extensions()
  • makes
  • 有一些很好的错误处理可以实现(见示例3),尽管有些hat尝试/捕捉这样做可能不符合您的编码风格。如果您选择使用不同的扩展(即.php、.php.inc或.inc),则使用不同扩展的
  • 肯定没有覆盖“my”自动加载类!如果__autoload()稍后运行,我的spl_autoload_register()‘ed函数将不会被替换。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5600883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档