PHP include_once在函数内部具有全局效果

Pwn*_*nna 2 php scope

我在php中有一个函数:

function importSomething(){
    include_once('something.php');
}
Run Code Online (Sandbox Code Playgroud)

我如何使它include_once具有全球效应?导入的所有内容都将包含在全球范围内?

Bol*_*ock 6

include()和朋友限制范围.除非将调用移出函数范围,否则无法更改包含内容所适用的范围.

我想解决方法是从函数返回文件名,并调用它将结果传递给include_once()...

function importSomething() {
    return 'something.php';
}

include_once(importSomething());
Run Code Online (Sandbox Code Playgroud)

它看起来不太好,你一次只能返回一个(除非你返回一个文件名数组,循环遍历它并include_once()每次调用),但是范围界定是该语言结构的一个问题.


ale*_*lex 5

您可以像这样返回文件中的所有变量。

function importSomething(){
   return include_once 'something.php';
}
Run Code Online (Sandbox Code Playgroud)

只要something.php看起来像...

<?php

return array(
    'abc',
    'def'
);
Run Code Online (Sandbox Code Playgroud)

您可以将其分配给全局变量...

$global = importSomething();

echo $global[0];
Run Code Online (Sandbox Code Playgroud)

如果您想变得非常疯狂,则可以将extract()所有这些数组成员都放入作用域中(在您的情况下为全局)。