我正试图找到最好的实用方法来动态导入函数......让我解释一下。
假设我有一个名为 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()来检查是否定义了函数,如果是这样的话,抛出一个通知,以便在日志文件中很容易跟踪,否则定义函数。然而,这可能会转化为在我需要这样一个功能的其他文件中有很多include / require语句,我并不喜欢这样。或者可能,读取目录并循环遍历每个* .func.php文件和include_once。虽然我发现这有点难看。
问题是,你有没有偶然发现一些处理这种情况的源代码?它是如何实现的?你做过类似的事吗?我需要尽可能多的想法! :)
答案 0 :(得分:4)
你可以将这样的东西拉出来的一种方法是将这些函数放入类中,然后设置__autoload函数。如果您反对在类中包装函数而不是此解决方案可能不适用于您。我个人喜欢它,因为它允许我命名我的函数并在它们之间共享私有方法。
首先设置与此类似的自动加载功能。您需要调整命名约定以适合您自己的风格,并且可能会引入一些错误处理,但这只是为了获得基本的想法。
function __autoload($class_name){
require_once(strtolower("library/$class_name.class.php"));
}
然后,无论范围如何,您的代码中都可以执行此类操作。
arrayFunctions::doStuff($myArray);
PHP将自动尝试包含“library / arrayFunctions.class.php”并在arrayFunctions类中查找名为“doStuff”的方法。
答案 1 :(得分:0)
我对这个想法有疑问。在降低每秒最大可能请求方面,命中文件系统以包含单个函数是非常昂贵的。
在单个文件中加载/解析五个函数(静态类?)并且只使用其中两个(一个stat调用)而不是为两个函数加载两个文件(两个stat调用)通常要好得多。
当你需要所有五个功能时,这显然会变得更糟。
答案 2 :(得分:0)