函数中的PHP变量
我一直在想这是怎么做到的,我有一个函数函数中的PHP变量,php,variables,Php,Variables,我一直在想这是怎么做到的,我有一个函数 $sky = (a range of number 1 to 10); function condi($nnn){ if($$nnn <= 1){ echo 'Fails'; } elseif($$nnn <= 3){ echo 'Respectable'; } elseif($$nnn <= 5){ echo 'Decent'; } elseif($$nnn <= 7){ ec
$sky = (a range of number 1 to 10);
function condi($nnn){
if($$nnn <= 1){
echo 'Fails';
}
elseif($$nnn <= 3){
echo 'Respectable';
}
elseif($$nnn <= 5){
echo 'Decent';
}
elseif($$nnn <= 7){
echo 'Great';
}
elseif($$nnn <= 9){
echo 'Legendary';
}
elseif($$nnn = 10){
echo 'Ultimate';
}
}
condi('sky');
$sky=(数字1到10的范围);
函数condi($nnn){
如果($$nnn您的“nnn”变量中有两个$$符号。请删除一个。$sky
在全局范围内:
function condi($nnn){
global $$nnn;
if($$nnn <= 1){
...
函数condi($nnn){
全球$$nnn;
如果($$nnn用$GLOBALS[$nnn]
替换$$nnn
)
无论变量名$nnn
包含什么,它都不是函数的本地名称,因此您需要通过$GLOBALS
数组访问它(这比执行类似global$$nnn;
的操作,然后使用$$nnn
等操作要干净得多)。才能让函数看到$sky
(我认为这是目标),它必须在函数的作用域中可见。全局默认情况下不可见
您需要在函数内部说global$$nnn;
,或者将$$nnn
改为$GLOBALS[$nnn]
。请注意,这只适用于全局函数——您将无法传递其他函数的局部函数的名称并让此函数看到它们。您应该使用
<?php
$sky = rand(1, 5);
function condi($nnn){
global $sky;
switch ($$nnn) {
case $$nnn < 1:
echo "Fails";
break;
case $$nnn < 3:
echo "Respectable";
break;
case $$nnn <= 5:
echo "Decent";
break;
// .................... //
}
}
condi('sky');
?>
变量太可怕了。不要使用它们。如果你真的想要一个变量/动态变量,你可以写:${$nnn}来更清楚地说明你真正想做什么。不,你让事情变得更糟。他不想要一个全局变量,他只想把一个参数传递给它的函数(否则“函数”就没用了)@Robert He希望将变量名传递给函数,并使用该变量(在全局范围内)从函数内部开始。这是一个愚蠢的要求,但这将解决他的问题。@Robert de W怎么会这样?他正在向函数传递一个字符串,告诉函数他要使用哪个全局变量。@PaulPRO;你说得对,他这样做了。我在回答问题时过早得出了上述结论。+1我对这个和global$$nnn
因为它们都是有效的解决方案,但您是对的,这更干净(只要变量被带到内部范围,使用$GLOBALS[$nnn]
到处都会很麻烦:-)@rudi_visserglobal$$nn;
和类似$$nn=$GLOBALS[$nn]的别名有什么区别
一个如何比另一个更干净。很长一段时间以来,我一直在使用global$o;
导入全局范围的变量(我并不经常使用它们):SThanks,对PHP来说还是很新:)工作得很好!@PaulPRO一些人把global
看作是一个(对不起)像goto
这样的编程bastaridization。我并不完全是其中之一,但如果可能的话,我相信最好将依赖外部变量的函数封装在它们自己的类中,这样您就可以以一种有意义的方式导入所需的所有内容。我所说的变量别名就是这样做的:e> 函数名($varname){$var=$GLOBALS[$varname];开关($var){/*..*/}}
,因为它更简洁。变量在最好的情况下可能会令人困惑。但我认为这主要取决于个人偏好:)@PaulPro当然,使用GLOBALS
也可以有一个名为$$name
的变量(即,global$sky
)内部也是如此!但我仍然认为关键点是尽可能避免全局变量。global$sky;
如果您必须事先知道变量将包含什么,则会破坏变量的用途。