如何“全球化”PHP变量?

时间:2012-01-13 03:14:21

标签: php global-variables

我有一个名为ChangeApprovalInfo.php的页面 - 它有一个名为Row_Rendered的函数,如下所示;

function Row_Rendered() {

    // To view properties of field class, use:
    //var_dump($this-><FieldName>);

    $RecordOwner = $this->RequestUser->CurrentValue;  
        echo $RecordOwner;
} 

回应$ RecordOwner获取我在另一页上进行SQL查询所需的数据....

我有另一个名为ChangeApprovalEdit.php的页面 - 此页面有

<?php include_once "ChangeApprovalinfo.php" ?>

位于文件顶部。

ChangeApprovalEdit.php有一个函数,我需要在ChangedApprovalInfo.php中定义的$ RecordOwner变量

如果我添加&#34; echo $ RecordOwner&#34;在ChangeApprovalEdit.php页面上,我收到一条错误消息,说它是一个未知变量。我的理解是,我需要让它成为全球性的&#34;或某些此类业务。我对PHP知之甚少,而且我编辑的页面冗长而复杂。 (对我来说,至少)

  • 我需要做什么?我知道我提供的信息可能不足以回答这个问题。我不太了解甚至不知道我需要问什么。如果需要更多信息,我将进行编辑和跟进。

文件的pastebin

ChangeApprovalInfo.php = http://pastebin.com/bSRM1wwN
ChangeApprovalEdit.php = http://pastebin.com/AStG9pqb

编辑: 将Row_Rendered更改为此似乎更有效。我很难看到以后我可以回应这个变量......但我已经到了这个地方......

function Row_Rendered() {
    // To view properties of field class, use:
    //var_dump($this-><FieldName>);
    $GLOBALS['RecordOwner'] = $this->RequestUser->CurrentValue;  
} 

5 个答案:

答案 0 :(得分:2)

不要从函数中echo个变量,它只是将它们输出到标准输出。来自函数的return,因此您也可以在其他地方使用该值。

function Row_Rendered() {
    $RecordOwner = $this->RequestUser->CurrentValue;  
    return $RecordOwner;
} 

然后代替

$obj->Row_Rendered();

使用

echo $obj->Row_Rendered();

如果您想在其他地方使用该值,请使用

$value = $obj->Row_Rendered();

答案 1 :(得分:2)

你可以做几件事:

首先,您可以从函数返回$RecordOwner,并将其值存储在变量中。这种方法通常是首选。

function Row_Rendered() {

    // To view properties of field class, use:
    //var_dump($this-><FieldName>);

    $RecordOwner = $this->RequestUser->CurrentValue;  
        echo $RecordOwner;

    return $RecordOwner;
} 

// Store it in a variable when calling the function.
$RecordOwner = Row_Rendered();

或者,您可以在函数内部使其全局:

function Row_Rendered() {

    // To view properties of field class, use:
    //var_dump($this-><FieldName>);

    $GLOBALS['RecordOwner'] = $this->RequestUser->CurrentValue;  
        echo $GLOBALS['RecordOwner'];
} 

答案 2 :(得分:0)

您可以使用$GLOBALS superglobals数组,如下所示:

function Row_Rendered() {
  $GLOBALS['RecordOwner'] = $this->RequestUser->CurrentValue;  
}

但是,你不应该这样做。相反,重构您的应用程序,以便ChangeApprovalinfo.php中的视图只包含一个函数,然后使用适当的参数调用该函数。

答案 3 :(得分:0)

  

编辑:Chaning Row_Rendered这似乎更有效。我很难看到以后我可以回应这个变量......但是我已经到了这个地方......

function Row_Rendered() {
    // To view properties of field class, use:
    //var_dump($this-><FieldName>);
    $GLOBALS['RecordOwner'] = $this->RequestUser->CurrentValue;  
}

我觉得有必要为此更新写下另一个答案。让我演示从外部看到的全局变量的使用函数:

$obj->Row_Rendered();
$obj->foobar();

echo $GLOBALS['RecordOwner'];

快,echo将会是什么?这个价值来自哪里?嗯,这取决于$obj-foobar()的作用。也许它改变了全局变量。也许它没有。谁知道变量是否已设置?如果不在每次调用函数后添加调试行,您将如何追溯发生的事情?

这只是三行代码。想象一下,在任何复杂的应用程序中。

现在,如果return来自Row_Rendered

,我也会这样做
$owner = $obj->Row_Rendered();
$obj->foobar();

echo $owner;

如果Row_Rendered方法的行为正常(返回所有者),则此代码非常容易预测。如果你不遵循这种模式,那么当应用程序增长到任何一半复杂的大小时,你将有时间做任何事情。

答案 4 :(得分:0)

从函数内部将变量设置为全局变量

$my_global_var = "old value";

function doing_stuff(){
  global $my_global_var; //this will use the global variable instead of creating a local one
  $my_global_var = "new value";
}

echo $my_global_var;//returns "new value"
相关问题