2013-10-24 249 views
0

我想在一個函數中設置一個變量,以便在函數被調用時,它會向腳本提供一個變量值來通知頁面該函數被調用。這個工程只是顯示消息:函數不會返回值?

function MyMessage($display_message) 
{ 
    echo $display_message; 
} 

這工作正常,所以當我打電話:

MyMessage("Updated Database!"); 

的作品太NP。問題在於,函數在某些頁面中的頭文件之前顯示此消息,因爲頁眉在調用之前位於頁面的底部。是否有可能使它像:

function MyMessage($display_message) 
{ 

    $function_ran = 1; 

    echo $display_message; 

    return $function_ran; 

} 

然後在劇本,如果我顯示

if ($function_ran != 1) 
{ 
    include("header.php"); 
} 

這樣,如果功能不跑了,只顯示標題。問題是調用該函數時不會返回$ function_ran值。我怎樣才能做到這一點?

回答

1

$function_ran設爲全局並確保您在該函數中使用全局版本。

$function_ran = 0; 

# stuff 

function MyMessage($display_message) 
{ 
    global $function_ran; 
    $function_ran = 1; 
    echo $display_message; 
} 
+0

啊好主意,我一直用全局從沒有想到的功能之外拉取變量。 –

+0

奇怪它不工作。即使調用該函數,該值仍然爲0。 –

+0

您是在'$ function_ran = 0;'賦值之前還是之後調用函數? – Barmar

2

如果你不想使用全局變量,你需要存儲的函數的結果:

$function_ran = MyMessage("Updated Database!"); 
if ($function_ran != 1) 
{ 
    include("header.php"); 
} 
+0

是的,我試着通過向函數添加頭文件,但頭文件中的路徑和其他複雜代碼導致了大量錯誤。 –

1

如果你真的想使用的功能的回報,你必須分配返回一個變量,如:

$function_ran = MyMessage("Updated Database!"); 

當然,這將有可能使全球$function_ran,但比你不必使用回報。

我肯定會去分配返回值,因爲這是更透明和更好的編程風格。

希望幫助

0

你應該使用會話,你應該使用會話處理程序,並使用它,你可以爲這個函數的返回值設置會話。

+0

我可能只是做更難的方法,並通過像MyMessage($ display_message,$ function_ran)函數傳遞值 –

+0

您可以創建一些會話的格式:'_FUNC_class_functionname_' – PersianGulf

+0

或乾淨的命名,您可以選擇兩個名稱:'_OBJ_CLASS_FUNCTIONNAME_ ''方法'和'_FUNC_FUNCTIONNAME_'用於你的函數。即使您可以將您的文件添加到會話的名稱。 – PersianGulf

0

您可以將該標誌存儲在全局中,但要從需要使用全局關鍵字的函數修改全局變量。

喜歡的東西:

$function_ran = 0; 

function MyMessage($display_message) { 
    global $function_ran; 

    $function_ran = 1; 
    echo $display_message; 
} 
+0

是的,我已經完成了,它不是很奇怪。我會寫一個空白文件來測試它,看看爲什麼,然後嘗試將它應用到我的主腳本 –

1

而不是調用函數前檢查,該函數可以使用一個靜態變量,以避免做其工作兩次:

function MyMessage($display_message) { 
    static $function_ran = false; 

    if ($function_ran) { 
     return; 
    } 

    $function_ran = true; 
    echo $display_message; 
} 
+0

所以很奇怪,我創建了一個單獨的文件作爲測試,它的工作原理,但它不適用於我的主腳本可能是什麼衝突是什麼? –

+0

沒有看到你的腳本,我不可能猜測你做錯了什麼。 – Barmar

+0

唯一的區別是函數在POST上被調用,並且該函數被包含在另一個文件中。 –