2017-03-14 68 views
0

我有一些類型的問題,但我不明白它..我有一個包含/需要文件的功能,其中檢查文件已包括,並確實存在:PHP聲明變量,通過函數包含的另一個文件

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.phpfile_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要求的作品,並沒有從失去變量以前的文件。

謝謝!

+0

'全局變量$ Connect'應該解決這一問題 –

+0

當我使用'global'我必須使用'$ GLOBALS [「連接」]'我不想要的,因爲正如我所說的,它正常工作與經常包括。 – Ultrazz008

+0

您是否嘗試過使用require()而不是include來檢查可能是誤解? –

回答

0

好了,我怎麼看,當我打印的所有定義的變量(get_defined_vars()),我得到這個:

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

) 

因此,這意味着該變量傳遞,但只有一個函數中存在(因爲功能是暫時的),所以我可以使它工作將變量傳遞給function,但它不是我需要的唯一變量,所以我會使用兩種方法之一:

global如@湯姆首位創作者的評論說,和後來趕上它$GLOBALS

或使用function做檢查,並返回一個路徑如果存在/或空字符串如果文件不存在,然後只是include/require它。

謝謝大家。

我不會接受這個答案,所以如果有人能更好地解釋功能,在此解決方案的行爲方式,我會接受。

相關問題