-1

为什么这段代码不起作用? echo get('option_1')返回空值。

$settings= array(
    'option_1' => 'text'
);

function get($name)
{
    if ($name)
        return $settings[$name];
}

echo get('option_1');
4

3 回答 3

3

简单的解决方案是在$options里面做一个全局变量get()

function get($name)
{
    global $options;
    if ($name)
        return $options[$name];
}

如果您不喜欢全局状态,请将其$options作为参数get()(但它只是语法糖......):

function get($name, $options)
{
    if ($name)
        return $options[$name];
}
于 2012-06-03T12:58:01.223 回答
3

因为 $options 超出了 get 函数的范围。您要么必须:

  1. 将 $options 与 $name 作为函数参数一起传递
  2. 将 $options 声明为全局变量(非常糟糕的主意)
  3. 使用 $options 作为内部类变量并使用 $this->options 访问它(仅适用于类内部)
于 2012-06-03T12:59:02.273 回答
1

$options不在您的功能范围内get

面向对象的解决方案:

class Options
{
  private static $options = array(
    'option_1' => 'text',
  );

  public static function get($name)
  {
    return isset(self::$options[$name]) ? self::$options[$name] : null;
  }
}

echo Options::get('option_1');
于 2012-06-03T12:57:54.343 回答