2012-03-10 132 views
3

有沒有辦法在PHP中實現以下內容,還是僅僅是不允許? (請參閱下面的註釋行)從外部函數(PHP)中訪問函數中的局部變量

function outside() { 
    $variable = 'some value'; 
    inside(); 
} 

function inside() { 
    // is it possible to access $variable here without passing it as an argument? 
} 
+2

儘管每個人都告訴你,你可以使用全局變量:相信我 - 不要使用它們。它們只適用於小衆情況,如果你開始使用它們,你會發現所有的代碼都會變成一場災難。 – 2012-03-10 12:52:57

+0

如果你能解釋你正在嘗試完成的事情,也許我們可以想出一個很酷的kludge或者b)完成它的正確方法 – Jake 2012-03-10 14:01:18

+1

我在研究某些代碼時想到了這種特殊情況,那些詢問會幫助我更清楚地瞭解不同的範圍。它做了! – hsdev 2012-03-10 17:29:23

回答

1

它不可能。如果$variable是全球性變量,您可通過global關鍵字來訪問該文件。但是這是一個功能。所以你不能訪問它。

雖然可以通過設置一個全局變量$GLOBALS數組來實現。但是,你正在利用全球背景。

function outside() { 
    $GLOBALS['variable'] = 'some value'; 
    inside(); 
} 

function inside() { 
     global $variable; 
     echo $variable; 
} 
1

不,您不能從另一個函數訪問函數的局部變量,而不會將其作爲參數傳遞。

您可以使用global變量,但變量不會保持本地。

0

您不能在函數中訪問本地變量。變量必須設置爲全局

function outside() { 
global $variable; 
    $variable = 'some value'; 
    inside(); 
} 

function inside() { 
global $variable; 
    echo $variable; 
} 

這工作

2

注意,使用global關鍵字是不可取的,因爲你無法控制的(你永遠不知道在您的應用程序是用在其他變量和改變) 。但如果你正在使用類,它會使事情變得更容易!

class myClass { 
    var $myVar = 'some value'; 

    function inside() { 
     $this->myVar = 'anothervalue'; 
     $this->outside(); // echoes 'anothervalue' 
    } 

    function outside() { 
     echo $this->myVar; // anothervalue 
    } 
} 
1

這是不可能的。你可以通過使用global來完成。如果你僅僅只有不想定義參數,但可以給它裏面的功能,你可以使用:

function outside() { 
    $variable = 'some value'; 
    inside(1,2,3); 
} 

function inside() { 
    $arg_list = func_get_args(); 
    for ($i = 0; $i < $numargs; $i++) { 
     echo "Argument $i is: " . $arg_list[$i] . "<br />\n"; 
    } 
} 

爲看到PHP手冊funct_get_args()

+0

不知道funct_get_args()函數,在某些情況下可能非常有用。謝謝! – hsdev 2012-03-10 17:20:12