2009-12-17 58 views
0

乾草 我的課陣列becamed清零班上

class language{ 

    function merge($filename = ''){ 
// the path is true 
    return include_once ('language/'.$filename); 
    } 

} 

確定這個郎測試

en.php 

<?php 

if (empty($lang) || !is_array($lang)) 
{ 
    $lang = array(); 
} 

$lang = array_merge($lang, array(
    'test'  => 'Home Page' 

)); 

?> 

,如果我在en.php添加

echo $lang['test']; 

其返回首頁

b UT II使課堂

$l = new language; 
$l->merge('en.php'); 

它不工作 我檢查

var_dump($lang); 

它返回null

回答

1

如果您想從include_once調用返回某些內容,則必須在文件中返回某些內容。請參閱Example 5

<?php // return.php 
    $var = 'PHP'; 
    return $var; 
?> 

<?php // noreturn.php 
    $var = 'PHP'; 
?> 

<?php 
    $foo = include 'return.php'; 
    echo $foo; // prints 'PHP' 

    $bar = include 'noreturn.php'; 
    echo $bar; // prints 1 
?> 
1

$lang變量不存在,因爲你包括在en.php文件合併函數的範圍。從PHP manual ...

當包括一個文件,它 包含代碼繼承線的可變範圍 在其上包括 發生。 在調用文件中可用的任何變量將爲 ,在被調用文件中可用,從 指向前。但是, 包含的文件中定義的所有 函數和類都具有全局範圍。

因此$langmerge返回時丟失,除非您在該函數中聲明它爲全局函數。

+0

好的,好東西 – 2009-12-17 15:52:16

0

看到我soultion

function __construct(){ 
$this->lang = array(); 
} 

class language{ 

    function merge($filename = ''){  
include_once ('language/'.$filename); 

    return $this->lang = $lang; 
    } 

} 

,並在使用時 回聲$ 1-> LANG [ '測試'];