数组有什么不好?

时间:2012-06-03 12:54:38

标签: php arrays function

为什么此代码不起作用? echo get('option_1')返回null。

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

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

echo get('option_1');

3 个答案:

答案 0 :(得分:3)

简单的解决方案是使$options成为get()中的全局变量:

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

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分: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');