2012-01-17 63 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