2011-10-18 118 views
3

我有以下設置:PHP變量不傳遞給函數

class.staff.php

這定義了許多變量,一個我現在有工作爲$ thisuser-> getStaffLang ();

class.language.php

(只有一個函數,不是類)這個文件運行基於一個變量我通過它的header.inc.php一個SQL查詢,以及它應該拉工作人員唯一的語言ID。

功能是:

function translate($TRANSLATION){ 

$sql="SELECT $TRANSLATION FROM ".LANGUAGE_TABLE." WHERE LANGUAGE_ID=".$thisuser->getStaffLang; 
$query = mysql_query($sql); 
$translation = mysql_result($query,0); 
print $translation; 
} 

的header.inc.php

我使用這個功能

的範例翻譯工作進入第一個文件是:

translate('TEXT_WELCOME_BACK_STAFF'); 

我的問題是,當我在外面函數$ thisuser-> getStaffLang;被填充,但在函數內部是空的。我真的不希望一次又一次地將相同的變量傳遞給函數,因爲一些文件可能有20個以上的翻譯,並且看起來像很多冗餘編碼。有人能告訴我如何在這種情況下,我可以讓該變量被函數識別,而不必每次調用該函數時都將其傳遞給它。希望這不是很清楚。 :\

注意:class.language.php(其中函數是和不工作)和header.inc.php(其中變量單獨工作)都需要class.staff.php。所以他們都應該能夠使用該代碼/變量。

回答

1

translate()

+1

感嘆,那麼簡單!謝謝!在過去的2個小時裏,我一直在撞牆。 :P –

+0

那麼爲什麼有人-1我? :( –

+0

是的,我不知道。:\ –

0

$thisuser->getStaffLang的beggining添加global $thisuser;可能不是一個全球性的。您應該使其成爲全局函數,通過在函數的第一行中添加global $thisuser

或更好,還可以在函數範圍內傳遞此變量。所以像這樣:

function translate($TRANSLATION, $stafflang){ 
// function here 
} 

translate('TEXT_WELCOME_BACK_STAFF',$thisuser->getStaffLang); 
+0

先給予阿隆信用(儘管在幾秒鐘內),因爲我不想使用你所描述的「傳遞變量」方法,因爲有很多條目需要這樣做,我不想擁有所有準冗餘代碼。我知道(現在)你提到的兩種方法都可以工作,非常感謝! –

+0

你不應該依賴函數外部的變量。也許在將來的某個地方,你改變變量名稱,或者使它變成函數或其他東西,然後它突然失效,並且會給你帶來很多麻煩。 Whithin函數/類總是擁有一切本地 –

+0

順便說一句,這不是關於先到,它是關於最好的答案 –

1

您需要將$thisuser標記爲全局。見下:

function translate($TRANSLATION) 
{ 
    global $thisuser;  //<---- MUST MARK global 

    $sql="SELECT $TRANSLATION FROM ".LANGUAGE_TABLE." WHERE LANGUAGE_ID=".$thisuser->getStaffLang; 
    $query = mysql_query($sql); 
    $translation = mysql_result($query,0); 
    print $translation; 
}