繁体   English   中英

PHP包含/ require内部函数

[英]PHP include/require inside functions

拥有相当大的函数并且每次加载页面时都会加载它们,最好编写function foo(){ include(.../file_with_function's_code); return; } function foo(){ include(.../file_with_function's_code); return; } function foo(){ include(.../file_with_function's_code); return; }最小化函数脚本的大小? 或者无关紧要,因为当一个函数被加载(但没有执行)时,即使它被包含在内,也会加载内容? 谢谢。

(编辑:我的问题不是关于它是否可能)

虽然@Luceos答案在技术上是正确的(最好的正确),但它没有回答你问的问题,即更好地做到这一点,还是包括无论函数调用发生的事情?

我用最基本的方式测试了这个(OP,为什么不是你?):

<?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发生在调用文件中的函数内部,则调用文件中包含的所有代码将表现为就好像已在该函数内定义的那样。 因此,它将遵循该函数的可变范围。

问题是,为什么不将周围的函数定义添加到包含的文件中。 我认为在函数中包含的唯一可行理由是将该函数中的代码分成位。

Luceos '和Albatrosz都可能被误读,所以我觉得我应该澄清这些。

include指令集生成运行时 ZEND_INCLUDE_OR_EVAL操作,该操作调用Zend编译器来编译引用的文件。 所以通常你不应该在函数中嵌入include语句,如:

  • 每次在调用函数时获取代码路径时,都会执行include。 编译相同的代码100次是一个坏主意。

  • 如果代码包含全局范围的元素(例如函数或类声明),则执行该声明甚至两次将导致编译器错误。

除非你知道自己在做什么,否则要这样做。 使用Albatrosz描述的技术。 顺便提一下,他的__autoload()函数只是一个例子,它有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM