我有一个PHP变量,该值在我的文档开头设置,但是当我使用我的WHILE LOOP时,它变为UNDEFINED并停止工作。
任何人都可以帮助如何分配此值吗?
我试图保持定义的变量是$ lang
$lang = "en";// base url
function getAccountDeliveryDetails($id){
$query = "SELECT * FROM tbl_user_delivery WHERE user_id = '$id'";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)){
$phrase = array(
'de' => 'Bearbeiten',
'en' => 'Edit',
'es' => 'Editar',
'fr' => 'Éditer',
'it' => 'Modifica');
echo $phrase[$lang];
}
}
答案 0 :(得分:3)
在函数内部,您需要使用全局。功能第一行
function getAccountDeliveryDetails($id){
global $lang;
$query = "SELECT * FROM tbl_user_delivery WHERE user_id = '$id'";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)){
$phrase = array(
'de' => 'Bearbeiten',
'en' => 'Edit',
'es' => 'Editar',
'fr' => 'Éditer',
'it' => 'Modifica');
echo $phrase[$lang];
}
}
答案 1 :(得分:3)
$lang
超出了getAccountDeliveryDetails()
的范围。与JavaScript / Java / AS(您可能来自)不同,在函数外部定义的变量不会自动出现在函数的范围内。
假设$lang
是独立/全局的,您可以将global $lang;
作为函数的第一行,以便导入变量。但是,从长远来看,这不是一个好的解决方案。
答案 2 :(得分:1)
在函数
上使用global for access外部变量function getAccountDeliveryDetails($id){
global $lang;
$query = "SELECT * FROM tbl_user_delivery WHERE user_id = '$id'";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)){
$phrase = array(
'de' => 'Bearbeiten',
'en' => 'Edit',
'es' => 'Editar',
'fr' => 'Éditer',
'it' => 'Modifica');
echo $phrase[$lang];
}
}
答案 3 :(得分:1)
检查article关于变量范围
function getAccountDeliveryDetails($id){
global $lang;
..
答案 4 :(得分:0)
使用$GLOBALS
访问您的全局变量,因此请替换以下行:
echo $phrase[$lang];
这个:
echo $phrase[$GLOBALS['lang']];
答案 5 :(得分:0)
答案 6 :(得分:0)
有4种方法可以做到这一点:
<强>全局强>
如果可以,请远离这种方式,因为它会创建对现有超级全局的依赖,以便您的代码能够正常工作。
$lang = "en";// base url
function getAccountDeliveryDetails($id){
global $lang; //extra vars can be added after a , eg global $a, $b, $c;
....
}
Super Globals
与全局变量相同的问题,然而,这甚至更加混乱,因为它使用现有的超级全局并创建一种不可见的依赖,因为不需要使用global $varname
。此外,PHP编码器不会指望您将自定义变量保存在现有的超级全局变量中,例如:
不要这样做
$_SERVER['my_vars']['lang'] = "eg";// base url
function getAccountDeliveryDetails($id){
print $_SERVER['my_vars']['lang']; //ewwwww
....
}
功能参数
这是传递参数的常用方法。
$lang = "en";// base url
function getAccountDeliveryDetails($id, $lang){
print $lang;
....
}
使用(闭包)
并不真正适用于您现有的函数(但闭包仍被视为函数),但这只是为了更加“完整”的答案。您可以将它们作为参数传递,或使用“use”关键字将它们从本地范围中引入。
$lang = "en";// base url
function ($id) use ($lang) {
print $lang;
....
}
<强>结论强>
可以使用参数选项。您始终可以使用DEFAULT值来防止破坏任何现有代码,例如:
function getAccountDeliveryDetails($id, $lang = 'eg'){
$query = "SELECT * FROM tbl_user_delivery WHERE user_id = '$id'";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)){
$phrase = array(
'de' => 'Bearbeiten',
'en' => 'Edit',
'es' => 'Editar',
'fr' => 'Éditer',
'it' => 'Modifica');
echo $phrase[$lang];
}
}
所以你可以像这样调用这个函数,$ lang将默认为“en”:
getAccountDeliveryDetails(23);
答案 7 :(得分:0)
在global $lang;
函数
getAccountDeliveryDetails()
原因:
在用户定义的函数中,引入了本地函数范围。函数内使用的任何变量默认限制为本地函数范围。例如:
$a = 1; /* global scope */
function test()
{
echo $a; /* reference to local scope variable */
}
test();
此脚本不会产生任何输出,因为echo语句引用$ a变量的本地版本,并且尚未在此范围内分配值。您可能会注意到这与C语言略有不同,因为C中的全局变量可自动用于函数,除非被本地定义特别覆盖。这可能会导致一些问题,因为人们可能会无意中更改全局变量。在PHP中,如果要在函数中使用全局变量,则必须在函数内声明全局变量。
全球关键字
首先,使用global:
示例#1使用全局
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
上面的脚本将输出3.通过在函数中声明$a
和$b
全局,对任一变量的所有引用都将引用全局版本。函数可以操作的全局变量数量没有限制。