在函数中混淆了字符串到var(使用花括号)

时间:2012-01-17 12:53:47

标签: php

任何人都可以告诉我为什么这样有效(它回应“poo”):

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

但这不是:

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

我想使用这种方法来玩一些$ _POST变量。请告诉我是否可以解释更多...干杯!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

因为变量是在函数内部定义的。让函数返回值并将其赋值给函数外的变量。

答案 2 :(得分:1)

因为函数内部的变量不能从外部访问,除非在函数内使用“global $ var”或通过引用传递它,如function(& $ var)... 为了使您的代码能够工作,您需要

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