function foo(){ include(.../file_with_function's_code); return; }
来最小化函数脚本的大小是否更好?还是无所谓,因为当一个函数被加载(但未执行)时,即使它在 include 中,其内容也会被加载吗?谢谢。function foo(){ include(.../file_with_function's_code); return; }
来最小化函数脚本的大小是否更好?还是无所谓,因为当一个函数被加载(但未执行)时,即使它在 include 中,其内容也会被加载吗?谢谢。尽管 @Luceos 的回答在技术上是正确的(最好的正确类型),但它并没有回答你所问的问题,即这样做是否更好,或者无论如何都会发生包含?
我以最基本的方式测试了一下(楼主,你为什么不这样做呢?):
<?php
echo "Testing...";
function doThing() {
include nonExistantFile.php;
}
//doThing();
echo "Done testing.";
结果:
如果我调用doThing();
,会收到一个文件未找到的警告。
如果我注释掉doThing();
,就没有错误了!所以这样做可以节省文件加载时间。
或者,作为一个好的替代方案,将您的函数封装在类中,并利用__autoload
的好处:
function __autoload($class_name) {
include $class_name . '.php';
}
将 myBigFunction()
封装在一个类中
class myBigFunction {
public static function run() {
//the old code goes here
}
}
将其保存为myBigFunction.php
当您将该函数作为类的静态方法调用时:
myBigFunction::run()
__autoload
会加载文件,但是只有在调用时才会加载。
是的,这是可能的;请参见http://www.php.net/manual/en/function.include.php
如果include发生在调用文件内的函数中,则调用文件中包含的所有代码都将表现为在该函数内定义的代码。因此,它将遵循该函数的变量作用域。
问题是,为什么不将包含文件的周围函数定义添加到其中。我认为在函数内部进行include的唯一可行原因是将该函数内的代码拆分成几个部分。
两个链接 Luceos 和 Albatrosz 都可能被误读,所以我觉得我应该澄清一下。
include 指令集生成一个 运行时 ZEND_INCLUDE_OR_EVAL 操作,该操作调用 Zend 编译器编译引用的文件。因此,通常情况下,您不应该在函数中嵌入 include 语句,原因如下:
每次调用函数时,都会执行 include 语句。重复编译相同的代码是一个坏主意。
如果代码包含全局作用域元素(例如函数或类声明),那么即使执行该声明两次也会导致编译器错误。
因此,除非您知道自己在做什么,否则请勿这样做。使用像 Albatrosz 描述的技术。顺便说一下,他的 __autoload()
函数就是这种有效的例外情况之一。