-1

このコードが機能しないのはなぜですか? echo get('option_1')nullを返します。

$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 に答える