我將一個PHP文件包含到我的WordPress網站的頭文件中,該文件通過CSV文件進行搜索並返回我需要的變量。我試圖將它包含在頭文件中,因爲這是後期整個網站需要的變量。如果我測試它並嘗試從包含的腳本中回顯這個變量,它可以正常工作。但是,在網站的其他部分,如果我嘗試調用該變量,則不會返回任何內容。將變量從包含的PHP文件傳遞給父腳本
我知道該變量正在創建,因爲我試圖迴應它,它的工作原理。但是當我嘗試從不同的腳本使用該變量時,它不起作用。有什麼代碼需要將變量傳遞給網站的其餘部分?
我將一個PHP文件包含到我的WordPress網站的頭文件中,該文件通過CSV文件進行搜索並返回我需要的變量。我試圖將它包含在頭文件中,因爲這是後期整個網站需要的變量。如果我測試它並嘗試從包含的腳本中回顯這個變量,它可以正常工作。但是,在網站的其他部分,如果我嘗試調用該變量,則不會返回任何內容。將變量從包含的PHP文件傳遞給父腳本
我知道該變量正在創建,因爲我試圖迴應它,它的工作原理。但是當我嘗試從不同的腳本使用該變量時,它不起作用。有什麼代碼需要將變量傳遞給網站的其餘部分?
確保你每次想要在新函數中使用它,或者甚至在新腳本中都使用該變量global $variable
。這將確保該變量在您需要的任何地方都可用。
3個文件:
a.php只會:
<?php
include("c.php");
var_dump("c is ".$c . " after include()");
function incit(){
include("b.php");
var_dump("b is ".$b . " inside incit()");
}
incit();
var_dump("b is ".$b . " after incit()");
?>
b.php:
<?php
$b="bear";
?>
c.php:
<?php
$c="car";
?>
輸出如下:
string(24) "c is car after include()"
string(24) "b is bear inside incit()"
string(19) "b is after incit()"
so $ b只在函數的作用域內定義,而$ c在另一方面是「全局」definde。 所以你必須注意你使用include的範圍。
對不起,我不明白這個答案。當我添加全局$ actual_zone;進入INCLUDED文件,我可以在我的網站的其餘部分使用該變量。我聽說使用全局變量是一個壞主意(不知道爲什麼),但是如何使用更好的編碼實踐來達到相同的結果呢? – Kevin 2011-03-31 23:32:12
變量僅默認爲功能級別,如果您想在別處使用它們,則必須傳遞它們或將它們全局化。根據腳本的佈局方式,可以將其設置爲對象屬性,在這種情況下,它可以在對象可用的任何位置以及該對象的所有方法中使用 - 另一種方法是使用全局$ var,但這很糟糕想法和錯誤的編碼習慣 - 另一種方法是使用$ _SESSION ['myVar'] = $ var將它放入會話中,然後以相同的方式調用它 - 另一種方法是通過參數傳遞它,例如$ database-> getRows( $ var),然後在另一端「public function getRows($ var)」,現在你通過傳遞它來獲得$ var。
你真的認爲把想要通過會話變量從一個php文件傳遞到另一個文件是明智的做法嗎?實際上我的例子工作得很好,沒有任何全球化或使用任何對象屬性。它很大程度上取決於你包含文件的位置。如果它在函數內部,那麼include中的變量將保持在那裏。如果它位於基本級別,則在所有包含的文件中都可以訪問它。 – ITroubs 2011-03-31 23:11:54
我說這是一個選項,我不是主張通過SALT通過會話或其他東西:P – linus72982 2011-04-01 00:24:55
它不僅是一個選項 - 它是選項。我嘗試了無數的解決方案,沒有任何工作,這很簡單,我不相信我忽略了它。我試圖從一個7層深的包含if函數的$ var傳遞給最外層的父類。由於$ var既包含在函數內,也在函數內部聲明,並且在被調用後聲明 - 設置爲會話是BRILLIANT!而且我認爲這是明智的做法,因爲我只是將1到10的數字作爲變量在元素上設置類,並且javascript不是一個選項 - 所以BRAVO我花了數小時尋找這個解決方案! – Bruce 2017-04-11 06:55:43
一般來說全球化是一個壞主意。 – 2011-03-31 22:52:57
@Dagon:完全同意。 @ gms8994:通過函數參數傳遞變量總是更好的解決方案。爲什麼選擇全新的腳本? – Wh1T3h4Ck5 2011-03-31 22:59:23
這解決了我的問題,謝謝gms8994!對於上述情況,是否有更好的方法來達到相同的結果?再次感謝。 – Kevin 2011-03-31 23:27:24