2012-01-13 72 views
-1

我有一個名爲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

回答

2

從功能,只需將它們輸出到標準輸出不要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

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']; 
} 
0

可以使用$GLOBALS superglobals陣列,像這樣:

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

但是,你不應該這樣做。相反,請重構您的應用程序,以使ChangeApprovalinfo.php中的視圖只包含一個函數,然後使用相應的參數調用該函數。

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 ED和來自哪裏該值?那麼,這取決於$obj-foobar()做什麼。也許它會改變全局變量。也許它沒有。誰知道變量是否已經被設置?在每次函數調用之後,如何在不添加調試行的情況下追溯到底發生了什麼?

而這只是三行代碼。想象一下,在任何複雜的應用程序。

現在,同樣的事情,如果我從Row_Renderedreturn值:

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

echo $owner; 

如果Row_Rendered法行爲,因爲它應該(返回所有者),這個代碼是很容易預測。如果你不遵循這種模式,當應用程序增長到任何一半複雜的大小時,你將會有一段時間完成任何事情。