PHP声明变量,通过函数包含在另一个文件中

时间:2017-03-14 14:08:26

标签: php function include

我有一些问题,但是我没有得到它..我有一个包含/要求文件的功能,检查文件已经包含并存在:

function __include($fileclass, $is_required=false) {
    static $already_included = array();
    // checking is set extension of php file, if not append it.
    if (substr($fileclass,-4)!=".php") $fileclass = $fileclass.".php";

    // if already included return;
    if (isset($already_included[$fileclass])) return true;

    // check if file exists:
    if (file_exists($fileclass)) {
        if (!$is_required) include $fileclass;
        else require $fileclass;

        $already_included[$fileclass] = 1;
        return true;
        }
    else {
        if ($is_required) die("can't find required file");
        return false;
        }
}

它运作良好,但是当我开始处理该项目时,我已经使用它来包含一个文件,该文件使用来自父文件的变量(包含它的那个),但它会注意到{{ 1}}。

所以要明确编码:

我有两个文件 file_parent.php file_child.php ,我尝试过:

file_parent.php:

Notice: Undefined variable: VARIABLE_NAME

file_child.php:

function __include($fileclass, $is_required=false) { /** i've mentioned it above **/ }
class __CONNECTION {
    private $test;
    public function __construct() {
        $this->test = "SOMETHING";
    }
};
$Connect = new __CONNECTION();
// here i used it to include the children file:
__include('file_child.php');

我得到print_r($Connect);

当我更改 file_parent.php 时,我的功能包括:

Notice: Undefined variable: Connect

标准包括:

__include('file_child.php');

一切正常,变量已定义并将被打印。

我想include 'file_child.php'; 存在一些问题,但有人可以解释发生这种情况的真正原因是什么,是否可以修复它包括/要求通过function工作,并且不会丢失先前文件中的变量。

谢谢!

1 个答案:

答案 0 :(得分:0)

嗯,我怎么看,当我打印所有定义的变量(get_defined_vars())时,我得到了这个:

Array
(
    [fileclass] => test_file2.php
    [is_required] => 
    [already_included] => Array
        (
        )

)

这意味着变量被传递,但只有一个存在于函数中(因为函数是临时的),所以我可以使变量传递给function,但因为它不是唯一的变量我需要这样我会用两种方式之一:

global正如@Tom Doodler在评论中说的那样,后来用$GLOBALS

抓住它

或使用function进行检查,如果存在则返回路径,如果文件不存在则返回空字符串,然后只返回include/require

谢谢大家。

我不接受这个答案,所以如果有人能够更好地解释函数在这个解决方案中的行为方式,我会接受这个。