我有一些问题,但是我没有得到它..我有一个包含/要求文件的功能,检查文件已经包含并存在:
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
工作,并且不会丢失先前文件中的变量。
谢谢!
答案 0 :(得分:0)
嗯,我怎么看,当我打印所有定义的变量(get_defined_vars()
)时,我得到了这个:
Array
(
[fileclass] => test_file2.php
[is_required] =>
[already_included] => Array
(
)
)
这意味着变量被传递,但只有一个存在于函数中(因为函数是临时的),所以我可以使变量传递给function
,但因为它不是唯一的变量我需要这样我会用两种方式之一:
global
正如@Tom Doodler在评论中说的那样,后来用$GLOBALS
或使用function
进行检查,如果存在则返回路径,如果文件不存在则返回空字符串,然后只返回include/require
。
谢谢大家。
我不接受这个答案,所以如果有人能够更好地解释函数在这个解决方案中的行为方式,我会接受这个。