PHP循环中没有定义PHP变量

时间:2012-11-28 10:17:03

标签: php

我有一个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];
    }   
}

8 个答案:

答案 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)

你可以宣布

global $lang 

你的功能。

但这绝对不是一个好的编程实践。

参见PHP Variable scope 手册条目

答案 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全局,对任一变量的所有引用都将引用全局版本。函数可以操作的全局变量数量没有限制。