2

我正在尝试找到动态导入函数的最佳实用方法……让我解释一下。

假设我有一个名为functions的目录,其中包含以下文件:

array_select.func.php
stat_mediam.func.php
stat_mean.func.php
.....

我想:加载每个单独的文件(其中定义了一个函数)并像使用内部 php 函数一样使用它。例如 array_pop()、array_shift() 等。

有一次我偶然发现了一个教程(我现在找不到了)将用户定义的函数编译为 PHP 安装的一部分。虽然这不是一个很好的解决方案,因为在共享/经销商托管上你不能重新编译 PHP 安装.

我不想与 PHP/其他扩展的未来版本发生冲突,即如果我命名为 X 的函数突然成为内部 php 函数的一部分(即使它本身可能没有相同的功能)我不'不希望 PHP 因此抛出致命错误并惨遭失败。

所以我能想到的最好的方法是检查是否定义了一个函数,使用 function_exists(),如果是,则抛出一个通知,以便在日志文件中轻松跟踪,否则定义函数。然而,这可能会转化为在我需要这样一个函数的其他文件中有很多包含/要求语句,我真的不喜欢。或者可能,读取目录并遍历每个 *.func.php 文件和 include_once。虽然我觉得这有点难看。

问题是,你有没有偶然发现一些处理这种情况的源代码?它是如何实施的?你做过类似的事情吗?我需要尽可能多的想法!:)

4

3 回答 3

4

您可以完成类似操作的一种方法是将这些函数放入类中,然后设置一个__autoload函数。如果您反对将函数包装在类中,那么此解决方案可能不适用于您。我个人喜欢它,因为它允许我命名我的函数并在它们之间共享私有方法。

首先,您设置类似于此的自动加载功能。您需要调整命名约定以适合您自己的风格,并且可能会引入一些错误处理,但这只是为了了解基本概念。

function __autoload($class_name){
     require_once(strtolower("library/$class_name.class.php"));
}

然后在代码中的任何地方,无论范围如何,您都可以执行类似的操作。

arrayFunctions::doStuff($myArray);

PHP 将自动尝试包含“library/arrayFunctions.class.php”并在 arrayFunctions 类中查找名为“doStuff”的方法。

于 2010-03-16T20:13:02.337 回答
0

我有这个想法的问题。命中文件系统以包含单个函数是非常昂贵的,因为它会降低每秒的最大可能请求数。

通常在一个文件中加载/解析五个函数(静态类?)并且只使用其中两个(一个 stat 调用)而不是为两个函数加载两个文件(两个 stat 调用)要好得多。

当您需要所有五个功能时,这显然会变得更糟。

于 2010-03-16T20:29:21.453 回答
0
  1. 要在需要时自动加载内容,请将您的函数放在类中并使用自动加载。
  2. 对于名称冲突,请使用命名空间(如果您有 PHP 5.3)。
于 2010-03-16T20:31:08.457 回答