2011-03-31 76 views
0

我將一個PHP文件包含到我的WordPress網站的頭文件中,該文件通過CSV文件進行搜索並返回我需要的變量。我試圖將它包含在頭文件中,因爲這是後期整個網站需要的變量。如果我測試它並嘗試從包含的腳本中回顯這個變量,它可以正常工作。但是,在網站的其他部分,如果我嘗試調用該變量,則不會返回任何內容。將變量從包含的PHP文件傳遞給父腳本

我知道該變量正在創建,因爲我試圖迴應它,它的工作原理。但是當我嘗試從不同的腳本使用該變量時,它不起作用。有什麼代碼需要將變量傳遞給網站的其餘部分?

回答

0

確保你每次想要在新函數中使用它,或者甚至在新腳本中都使用該變量global $variable。這將確保該變量在您需要的任何地方都可用。

+2

一般來說全球化是一個壞主意。 – 2011-03-31 22:52:57

+0

@Dagon:完全同意。 @ gms8994:通過函數參數傳遞變量總是更好的解決方案。爲什麼選擇全新的腳本? – Wh1T3h4Ck5 2011-03-31 22:59:23

+0

這解決了我的問題,謝謝gms8994!對於上述情況,是否有更好的方法來達到相同的結果?再次感謝。 – Kevin 2011-03-31 23:27:24

0

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的範圍。

+0

對不起,我不明白這個答案。當我添加全局$ actual_zone;進入INCLUDED文件,我可以在我的網站的其餘部分使用該變量。我聽說使用全局變量是一個壞主意(不知道爲什麼),但是如何使用更好的編碼實踐來達到相同的結果呢? – Kevin 2011-03-31 23:32:12

1

變量僅默認爲功能級別,如果您想在別處使用它們,則必須傳遞它們或將它們全局化。根據腳本的佈局方式,可以將其設置爲對象屬性,在這種情況下,它可以在對象可用的任何位置以及該對象的所有方法中使用 - 另一種方法是使用全局$ var,但這很糟糕想法和錯誤的編碼習慣 - 另一種方法是使用$ _SESSION ['myVar'] = $ var將它放入會話中,然後以相同的方式調用它 - 另一種方法是通過參數傳遞它,例如$ database-> getRows( $ var),然後在另一端「public function getRows($ var)」,現在你通過傳遞它來獲得$ var。

+0

你真的認爲把想要通過會話變量從一個php文件傳遞到另一個文件是明智的做法嗎?實際上我的例子工作得很好,沒有任何全球化或使用任何對象屬性。它很大程度上取決於你包含文件的位置。如果它在函數內部,那麼include中的變量將保持在那裏。如果它位於基本級別,則在所有包含的文件中都可以訪問它。 – ITroubs 2011-03-31 23:11:54

+1

我說這是一個選項,我不是主張通過SALT通過會話或其他東西:P – linus72982 2011-04-01 00:24:55

+0

它不僅是一個選項 - 它是選項。我嘗試了無數的解決方案,沒有任何工作,這很簡單,我不相信我忽略了它。我試圖從一個7層深的包含if函數的$ var傳遞給最外層的父類。由於$ var既包含在函數內,也在函數內部聲明,並且在被調用後聲明 - 設置爲會話是BRILLIANT!而且我認爲這是明智的做法,因爲我只是將1到10的數字作爲變量在元素上設置類,並且javascript不是一個選項 - 所以BRAVO我花了數小時尋找這個解決方案! – Bruce 2017-04-11 06:55:43