Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数中的PHP变量_Php_Variables - Fatal编程技术网

函数中的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_visser
global$$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;
如果您必须事先知道变量将包含什么,则会破坏变量的用途。