PHP变量未传递给函数
我有以下设置: class.staff.php 这定义了许多变量,我现在使用的变量是$thisuser->getStaffLang() class.language.php (只是一个函数,不是一个类)该文件基于我从header.inc.php传递给它的一个变量运行sql查询,并且它应该提取职员的唯一语言ID 功能是:PHP变量未传递给函数,php,function,variables,Php,Function,Variables,我有以下设置: class.staff.php 这定义了许多变量,我现在使用的变量是$thisuser->getStaffLang() class.language.php (只是一个函数,不是一个类)该文件基于我从header.inc.php传递给它的一个变量运行sql查询,并且它应该提取职员的唯一语言ID 功能是: function translate($TRANSLATION){ $sql="SELECT $TRANSLATION FROM ".LANGUAGE_TABLE." WHER
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。因此,它们都应该能够利用该代码/变量。添加
global$thisuser在translate()
$thisuser->getStaffLang
的开头,code>可能不是全局的。您可以通过在函数的第一行添加global$thisuser
使其成为全局函数
或者更好,在函数范围中也传递这个变量。比如说:
function translate($TRANSLATION, $stafflang){
// function here
}
translate('TEXT_WELCOME_BACK_STAFF',$thisuser->getStaffLang);
您需要将$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;
}
函数翻译($TRANSLATION)
{
全局$thisuser;//getStaffLang;
$query=mysql\u查询($sql);
$translation=mysql\u结果($query,0);
打印$翻译;
}
叹气,太简单了!非常感谢。在过去的两个小时里,我一直把头撞在墙上Phehe,我自己也试过了,但我还没有这个代表:在他第一次回答的时候(虽然在几秒钟内)我就给了他积分,因为我不想使用你描述的“传递变量”方法,因为有很多条目我需要这样做,我不想有所有的准冗余代码。答案也很好,因为我知道(现在)你提到的两种方法都会奏效。非常感谢!您不应该依赖函数外部的变量。也许在将来的某个地方,你改变了变量名,或者让它起作用,然后它突然失效,然后会给你带来很多麻烦。Whithin函数/类总是在本地拥有一切顺便说一句,这不是第一位,而是最好的答案谢谢你的建议,我一定会记住的。关于这个特殊变量,尽管我知道它永远不会改变,$thisuser是整个结构中最重要的变量之一。不过我一定会记住你说的话。再次感谢。“顺便说一句,这不是第一位的问题,这是最好的答案”当然,但我特别提到我不想要你在我最初的问题中描述的方式。