【发布时间】:2017-08-04 22:07:02
【问题描述】:
我有一些问题,但我不明白。我有一个包含/要求文件的功能,它检查文件是否已经包含并且确实存在:
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;
}
}
它工作得很好,但是当我开始处理这个项目时,我用它来包含一个文件,该文件使用父文件(包含它的那个)中的变量,但它放弃了Notice: Undefined variable: VARIABLE_NAME 的通知。
所以在编码时要清楚:
我有两个文件file_parent.php和file_child.php,我试过了:
file_parent.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');
file_child.php:
print_r($Connect);
我得到Notice: Undefined variable: Connect。
当我更改 file_parent.php 我的功能包括:
__include('file_child.php');
标准包括:
include 'file_child.php';
一切正常,变量已定义并被打印出来。
我猜function 有一些问题,但有人可以解释发生这种情况的真正原因是什么,并且是否有可能修复它以通过function 包含/要求工作并且不会丢失以前文件中的变量。
谢谢!
【问题讨论】:
-
global $Connect应该可以解决问题 -
当我使用
global时,我必须使用我不想要的$GLOBALS['Connect'],因为正如我所说,它适用于常规包含。 -
您是否尝试过使用 require() 而不是 include 来检查是否存在误解?
-
是的,我试过了,
require和include都可以工作,当在函数之外,当在函数内时,它们包含在内,但变量仍然未定义..正如@Tom涂鸦者说,global可以解决它,使用$GLOBALS['Connect']但我希望在没有global的情况下做到这一点..