如何“全球化”PHP变量?

问题描述:

我有一个名为ChangeApprovalInfo.php的页面 - 它有一个名为Row_Rendered的函数,如下所示;如何“全球化”PHP变量?

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

的ChangeApprovalEdit.php页面上定义如果我添加“回声$ RecordOwner的” $ RecordOwner变量,我得到一个错误,说这是一个未知变量。我的理解是,我需要“使其成为全球”或某些此类业务。我对PHP知之甚少,而我正在编辑的页面又长又复杂。 (对我而言,至少)

  • 我需要做什么?我知道我提供的信息可能不足以回答这个问题。我甚至不知道甚至完全知道我需要问什么。如果需要更多信息,我会编辑并跟进。

文件

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; 
} 
+0

做你想做的事,但要注意的是,如果你继续使用全局变量,你会得到一大块泥。这真的需要一个'return'来代替。 – deceze 2012-01-13 04:53:21

从功能,只需将它们输出到标准输出不要echo变量。 return他们从功能,所以你可以使用其他地方的价值。的

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

然后代替

$obj->Row_Rendered(); 

使用

echo $obj->Row_Rendered(); 

,如果你想在其他地方使用的值,使用

$value = $obj->Row_Rendered(); 
+0

只需添加一个,如果函数中有很多变量返回数组或对象! – user1040899 2012-01-13 03:26:15

你可以做几件事情:

首先,您可以从函数返回$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']; 
} 

可以使用$GLOBALS superglobals阵列,像这样:

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

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

编辑: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 ED和来自哪里该值?那么,这取决于$obj-foobar()做什么。也许它会改变全局变量。也许它没有。谁知道变量是否已经被设置?在每次函数调用之后,如何在不添加调试行的情况下追溯到底发生了什么?

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

现在,同样的事情,如果我从Row_Renderedreturn值:

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

echo $owner; 

如果Row_Rendered法行为,因为它应该(返回所有者),这个代码是很容易预测。如果你不遵循这种模式,当应用程序增长到任何一半复杂的大小时,你将会有一段时间完成任何事情。