2011-10-18 46 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; 
}