当前位置: 首页 > 面试题库 >

如何在函数内使用include?

安建木
2023-03-14
问题内容

我有一个很大的功能,希望仅在需要时才加载。因此,我认为使用include是必经之路。但是我也需要几个支持功能-仅在go_do_it()中使用。

如果它们在包含的文件中,则会出现重新声明错误。参见示例A

如果将支持功能放在include_once中,则可以正常工作,请参见示例B。

如果我对func_1代码使用include_once,则第二次调用将失败。

我对为什么include_once导致函数在第二次调用时失败感到困惑,它似乎没有第二次“看到”代码,但是如果存在嵌套函数,它将“看到”它们。

范例A:

<?php
/*  main.php    */
go_do_it();
go_do_it();
function go_do_it(){
    include 'func_1.php';
}
?>

<?php
/*  func_1.php  */
echo '<br>Doing it';
nested_func()

function nested_func(){
    echo ' in nest';
}
?>

范例B:

<?php
/*  main.php    */
go_do_it();
go_do_it();
function go_do_it(){
    include_once 'func_2.php';
    include 'func_1.php';
}
?>

<?php
/*  func_1.php  */
echo '<br> - doing it';
nested_func();
?>

<?php
/*  func_2.php  */
function nested_func(){
    echo ' in nest';
}
?>

问题答案:

include()在函数内使用的问题是:

include 'file1.php';

function include2() {
  include 'file2.php';
}

file1.php将具有全球范围。file2.php的范围是功能的局部范围include2

现在,所有函数的作用域都是全局的,但变量不是。我对此感到困惑并不惊讶include_once。如果您真的想走这种方式(老实说我不会),那么您可能需要借用一个旧的C
/ C ++预处理技巧:

if (!defined(FILE1_PHP)) {
  define(FILE1_PHP, true);

  // code here
}

如果要采用延迟加载的方式(顺便说一下,这可能会导致操作码缓存问题),请改用自动加载。



 类似资料:
  • 我在看H.J.Lu的补丁:更新x86 rdrand intrinsics。我不知道我是否应该使用rdrand\u64、rdrand64\u步骤,或者是否有其他功能。似乎没有为他们编写测试用例。 似乎也缺乏手册页(来自Ubuntu 14,GCC 4.8.4): 如何使用RDRAND内部函数来生成一个32字节的块? 一个相关的问题是RDRAND和RDSEED内部函数GCC和Intel C。但它没有告诉

  • 问题内容: 我想知道如何访问另一个函数中的一个函数。我看到了这样的代码: 那么,还有另一种方法来调用该 函数吗?我的第二个问题是,为什么在最后一行中我不打电话? 很好的解释深表感谢。 问题答案: 不,您不能直接调用它,因为它是的局部变量。 您需要使用,因为调用时返回了函数对象。要执行此功能对象,您需要 在这里您可以直接调用它,因为您可以访问它,因为它是由函数返回的。返回的对象实际上称为 闭包, 因

  • 我目前正在阅读React官方网站,在那里我遇到了这个问题。React官方网站声明我们可以在JSX中使用函数代码。因此,我尝试了以下代码,但不起作用。 ABCD类扩展了React。组件{ } 我知道,我知道,你们中的一些人可能会说,看看React网站上给出的例子。我看到了,官网上的例子涉及到外部功能。我只是想知道我们能否独立使用JSX内部的函数。 有关更多信息,请参阅此链接:https://reac

  • 我正在使用内核3.16并尝试使用LZ4压缩内存中的数据。我检查了内核源代码树,找到了压缩源文件/lib/lz4。c和我使用了以下函数: 但我得到了以下错误: 我的源代码: 我试图找到一些关于LZ4如何在内核模块中工作的示例,但什么也没有找到。我不知道是否有人有在内核模块中进行压缩的经验。 谢啦!

  • 问题内容: 我正在为node.js代码编写一些单元测试,并且使用Sinon通过以下方式存根函数调用 该是这样的 对于诸如这样的用例,模拟显然可以工作,但是我想知道如何在使用时在anotherF()内部模拟myFunction()调用? 问题答案: 您可以稍微重构一下模块。像这样。

  • 问题内容: 我正在用Java执行一个项目,该项目具有在数据库中添加文件的功能,并且我想使用winapi函数来选择文件。我该怎么办? 问题答案: 到目前为止,最简单的方法是使用Java JNA,它已经具有stcalls的翻译功能。 您可以在JavaWorld上找到它的基础教程(至少有Winapi示例)。 您也可以使用JNI,但是JNI要求您使用专门构建的头文件进行接口连接,而这一切都很难维护和使用。