如何“全球化”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;
}
从功能,只需将它们输出到标准输出不要echo
变量。 return
他们从功能,所以你可以使用其他地方的价值。的
function Row_Rendered() {
$RecordOwner = $this->RequestUser->CurrentValue;
return $RecordOwner;
}
然后代替
$obj->Row_Rendered();
使用
echo $obj->Row_Rendered();
,如果你想在其他地方使用的值,使用
$value = $obj->Row_Rendered();
只需添加一个,如果函数中有很多变量返回数组或对象! – 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_Rendered
return
值:
$owner = $obj->Row_Rendered();
$obj->foobar();
echo $owner;
如果Row_Rendered
法行为,因为它应该(返回所有者),这个代码是很容易预测。如果你不遵循这种模式,当应用程序增长到任何一半复杂的大小时,你将会有一段时间完成任何事情。
做你想做的事,但要注意的是,如果你继续使用全局变量,你会得到一大块泥。这真的需要一个'return'来代替。 – deceze 2012-01-13 04:53:21