php函数作用域变量总是空的

时间:2013-07-10 20:45:28

标签: php function scope

我有奇怪的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;
}

如果我打印$ ElmId $ ElmName和$ optionsStr,它会打印出罚款 但是当我将返回变量打印到循环外时,其结果为空 为什么?

1 个答案:

答案 0 :(得分:0)

您无需将$ optionsStr声明为全局。实际上,如果您将其作为函数的值返回,则不应该。

试试这个:

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;