-1

我有一个 PHP 变量,它的值是在我的文档开头设置的,但是当我使用我的 WHILE LOOP 时,它会变得未定义并停止工作。

任何人都可以帮助如何保持分配这个值?

我试图保持定义的变量是 $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];
    }   
}
4

8 回答 8

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];
    }   
}
于 2012-11-28T10:18:37.413 回答
3

$lang不在范围内getAccountDeliveryDetails()。与 JavaScript/Java/AS(您可能来自)不同,在函数外部定义的变量不会自动出现在函数的范围内。

假设$lang是独立的/全局的,您可以调用global $lang;函数的第一行以导入变量。但是,从长远来看,这并不是一个好的解决方案。

于 2012-11-28T10:18:56.270 回答
1

使用全局访问函数上的外部变量

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];
 }   
}
于 2012-11-28T10:18:59.533 回答
1

查看有关变量范围的文章

function getAccountDeliveryDetails($id){
   global $lang;
   ..
于 2012-11-28T10:19:18.047 回答
0

用于$GLOBALS访问您的全局变量,因此请替换您的以下行:

echo $phrase[$lang];

对于这个:

echo $phrase[$GLOBALS['lang']];
于 2012-11-28T10:19:08.787 回答
0

你可以声明

global $lang 

在你的函数里面。

但这绝对不是一个好的编程习惯。

请参阅PHP 变量范围手册条目

于 2012-11-28T10:22:02.357 回答
0

有 4 种方法可以做到这一点:

全局变量

如果可以的话,请远离这种方式,因为它会创建对现有超级全局的依赖,以便您的代码能够正常工作。

$lang = "en";// base url
function getAccountDeliveryDetails($id){
    global $lang; //extra vars can be added after a , eg global $a, $b, $c;
    ....
}

超级全球人

与全局变量相同的问题,然而,这更加混乱,因为它使用现有的超级全局变量并创建一种不可见的依赖关系,因为不需要使用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);
于 2012-11-28T10:41:48.970 回答
0

写入 global $lang;内部getAccountDeliveryDetails()函数

原因:

在用户定义的函数中,引入了本地函数范围。默认情况下,函数内部使用的任何变量都仅限于本地函数范围。例如:

$a = 1; /* global scope */ 


    function test()
    { 
        echo $a; /* reference to local scope variable */ 
    } 

    test();

此脚本不会产生任何输出,因为 echo 语句引用了 $a 变量的本地版本,并且尚未在此范围内为其分配值。您可能会注意到这与 C 语言有点不同,因为 C 中的全局变量自动可用于函数,除非被局部定义特别覆盖。这可能会导致一些问题,因为人们可能会无意中更改全局变量。在 PHP 中,如果要在函数中使用全局变量,则必须在函数中声明它们为全局变量。

全局关键字

首先,一个使用全局的示例:

Example #1 使用全局

$a = 1;
$b = 2;

    function Sum()
    {
        global $a, $b;

        $b = $a + $b;
    } 

    Sum();

echo $b;

上面的脚本将输出 3。通过在函数中声明$a$bglobal,对任一变量的所有引用都将引用全局版本。一个函数可以操作的全局变量的数量没有限制。

于 2012-11-28T10:49:01.577 回答