2012-06-03 2 views
-1

왜이 코드가 작동하지 않습니까?echo get('option_1')은 null을 반환합니다.배열에 문제가 있습니까?

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

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

echo get('option_1'); 
+10

설명서를 읽으십시오 : http://php.net/manual/en/language.variables.scope.php (두 번째 예). –

+0

하하, 감사합니다. 범위를 잊어 버렸습니다. – Jasper

답변

3

간단한 솔루션은 $optionsget() 내부 전역 변수가 될 수 있도록하는 것입니다 인자는 get() (하지만 그저 문법적인 설탕입니다 ...) :

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

'글로벌'하지 마라. – meze

+0

meze, 동의, 그것이 내가 대답을 업데이트 한 이유이다. –

+0

글로벌 PHP에서 다른 언어로 글로벌 같지 않다는 것을 염두에두고 왜 '절대하지 않겠습니까?' – anubhava

1

$optionsget 함수의 범위에 있지 않습니다.

객체 지향 솔루션 :

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

하는 전역 상태를 좋아하지 않는 경우로 $options합니다

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'); 
3

$ options는 get 함수의 범위를 벗어납니다. 당신이 중 하나는해야한다 : 함수의 매개 변수로 $ 이름과 함께

  1. 패스 $ 옵션을
  2. 내부 클래스 변수 및 액세스를 글로벌 변수 (아주 나쁜 생각)와 같은
  3. 선언 $ 옵션
  4. 사용 $ 옵션 $ this-> options (클래스 내에서만 작동)
+0

의 글로벌 언어가 다른 언어의 전역 언어와 같지 않을 것이라는 점을 명심하십시오. 나는 왜 PHP의 글로벌이 '아주 나쁜 생각'인지를 깨닫게 될 것이다. – anubhava

관련 문제