php函数作用域变量始终以空结尾

php函数作用域变量始终以空结尾,php,function,scope,Php,Function,Scope,我有一个奇怪的senario,我有一个简单的函数,我试图用它来表示简单的html字符串 但是最后(在循环之后)保存该字符串的变量总是空的 function buildSelectOptionsASString($elmArray) { global $optionsStr; foreach ($elmArray as $Rec) { if(property_exists($Rec,'id')==true) {

我有一个奇怪的senario,我有一个简单的函数,我试图用它来表示简单的html字符串 但是最后(在循环之后)保存该字符串的变量总是空的

function buildSelectOptionsASString($elmArray)
{
     global $optionsStr;
    foreach ($elmArray as $Rec)
    {

        if(property_exists($Rec,'id')==true)
        {

            $ElmId = $Rec->id;
            $ElmName = $Rec->name;

            $optionsStr = $optionsStr ."<option value=\"".$ElmId."\">". $ElmName ."</option>\n";  

        }
    }
    echo  $optionsStr;
    return $optionsStr;
}
函数buildSelectOptions字符串($elmArray)
{
全球$optionssr;
foreach($ELM数组作为$Rec)
{
如果(属性_存在($Rec,'id')==true)
{
$ElmId=$Rec->id;
$ElmName=$Rec->name;
$optionsStr=$optionsStr.“$ElmName.\n”;
}
}
echo$optionssr;
返回$optionssr;
}
如果我打印$ElmId$ElmName和$optionstr,它将打印contant fine 但当我将返回变量打印到循环的外侧时,其结果为空
为什么?

您不需要将$optionssr声明为全局。事实上,如果您将其作为函数的值返回,则不应该这样做

试试这个:

function buildSelectOptionsASString($elmArray)
{
  $optionsStr = "";  // this $optionsStr is local to this function.

  foreach ($elmArray as $Rec)
  {

    if(property_exists($Rec,'id')==true)
    {
        $ElmId = $Rec->id;
        $ElmName = $Rec->name;
        $optionsStr = $optionsStr ."<option value=\"".$ElmId."\">". $ElmName ."</option>\n";  
    }
  }
  echo  $optionsStr;
  return $optionsStr;
}

$elmArray = array();  // set up your array here

$optionsStr = buildSelectOptionsASString($elmArray);  // This is a different $optionsStr

echo $optionsStr;
函数buildSelectOptions字符串($elmArray)
{
$optionsStr=”“;//此$optionsStr是此函数的本地函数。
foreach($ELM数组作为$Rec)
{
如果(属性_存在($Rec,'id')==true)
{
$ElmId=$Rec->id;
$ElmName=$Rec->name;
$optionsStr=$optionsStr.“$ElmName.\n”;
}
}
echo$optionssr;
返回$optionssr;
}
$elmArray=array();//在这里设置您的阵列
$optionsStr=buildselectoptionasstring($elmArray);//这是一个不同的$optionstr
echo$optionssr;

数组是数组还是对象?代码表示后者,名称表示hte FORMERY您不需要将
$optionstr
声明为
全局
,但需要对其进行初始化。