【问题标题】:php function scope variable always in the end emptyphp函数作用域变量最后总是为空
【发布时间】:2013-07-08 23:12:52
【问题描述】:

我有一个奇怪的场景,我有一个简单的函数,我尝试连接简单的 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 它打印 contant 罚款 但是当我在循环之外打印返回变量时,它的结果是空的 为什么?

【问题讨论】:

  • $elmArray 是数组还是对象?代码说后者名称说是前者
  • 你不需要将$optionsStr声明为global,但你需要初始化它。

标签: php function scope


【解决方案1】:

您不需要将 $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;

【讨论】:

    猜你喜欢
    • 2014-03-14
    • 2018-04-17
    • 1970-01-01
    • 2011-08-03
    • 2017-05-27
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2012-06-19
    相关资源
    最近更新 更多