2012-01-17 29 views
0

誰能告訴我,爲什麼這個工程(它回聲去「便便」):困惑字符串VAR(使用大括號)在功能

$input = "wee"; 
$val = "poo"; 
${$input} = $val; 
echo $wee; 

但這並不:

function bodily($input) { 
    $val = "poo"; 
    ${$input} = $val; 
} 
bodily("wee"); 
echo $wee; 

我想用這種方法來玩一些$ _POST變量。請告訴我,如果我能解釋更多...乾杯!

+0

使用這種方法來玩$ _POST vars沒有意義。 $ _POST是一個數組,你需要方形,而不是花括號來訪問它的成員。 – 2012-01-17 13:03:00

回答

4

您的變量$wee僅在函數bodily()的範圍內定義。它沒有在這個函數之外定義。

可以使其global,反正這不是一個現實生活中應用一個有用的模式:

function bodily($input) { 
    $val = "poo"; 
    global ${$input}; // make your $wee defined in the global scope 
    ${$input} = $val; 
} 
bodily("wee"); 
echo $wee; 

輸出

poo 
+0

好的謝謝。有人想知道我爲什麼要這樣做,我厭倦了總是要檢查$ _POST或$ _GET變量是否爲空,然後在使用它們時是否設置了它們。我想能夠說'身體('wee')',並且該函數檢查$ _POST ['wee']或$ _GET ['wee']作爲值,如果存在值,則將其粘貼一個名爲$ wee的變量。 – 2012-01-17 14:22:50

3

由於變量的函數內局部定義。讓函數返回值並將其分配給函數外部的變量。

+0

另一種(可能)方法是在'bodily'中聲明'$ wee'爲全局。 – J0HN 2012-01-17 12:57:24

+0

是的,但強烈建議不要使用全局變量!它會使代碼變得更糟糕,無法閱讀/理解。 – Armin 2012-01-17 13:02:03

+0

非常感謝Armin和J0HN! – 2012-01-17 16:50:23

1

因爲函數內部的變量不是從外部接近,除非在函數內部使用「全球$ VAR」或類似功能的參考(& $ VAR)... 傳遞,以便爲您的代碼工作,你需要

<?php 
function bodily($input) { 
    $val = "poo"; 
    ${$input} = $val; 
    echo $wee; 
} 
bodily("wee"); 
+0

謝謝瑪麗安!我想我會完全忘記這一點,因爲上面的評論表明這將是一個壞主意。 – 2012-01-17 16:52:24