代码之家  ›  专栏  ›  技术社区  ›  Extrakun

选择性PHP自动加载

php
  •  0
  • Extrakun  · 技术社区  · 14 年前

    我正在编写一个与现有的PHP应用程序集成的附加模块;因为我使用的是MVC模式,可能需要包含大量类(根据用户的操作,可能根本不使用这些类),所以我决定使用类的自动加载。

    但是,我必须确保自动加载功能不会干扰现有应用程序的正常操作。

    1. 只有在没有定义类名的情况下自动加载才起作用吗?

    2. 假设我必须编写另一个模块,它使用自己的自动加载功能(例如,我有一个模块的自动加载,因为每个模块都位于自己的文件夹中),我如何区分它用于哪个模块?

    对于2,我考虑了两种选择。在类名前面加上模块名(例如“mynewmodule-view-default”和“anoThermodule-view-default”),或者使用文件“exists”检查包含文件是否存在。

    其他建议也欢迎!

    2 回复  |  直到 14 年前
        1
  •  5
  •   Gordon Haim Evgi    14 年前
    1. 只需检查要加载的类是否已经存在 class_exists() 在自动加载程序实现中实际加载它之前。尤其是如果您有多个已注册的自动加载程序(请参见2)。

    2. 可以通过指定堆栈中的多个自动加载程序 spl_autoload_register() . 注册函数按注册顺序执行,直到成功加载类为止。例如,可以为不同的模块指定不同的自动加载程序。或者,如果您可以控制类名,也可以使用Zend_框架中的名称间距方法。

        2
  •  0
  •   reko_t    14 年前
    1. 是的,只有在找不到类名时才调用Autoloader。

    2. 通常检查类的名称空间(5.3之前的版本使用伪名称空间,通常用下划线分隔)。因此,自动加载程序只加载应用程序命名空间下的类。