2012-10-10 12 views
0

나는 검색, 내게 도움이 질문에 발견 : 그것은, 그러나, 내 모든 문제가 해결되지 않은 php static variable is not getting set정적 변수가 설정되지 않았습니까?

합니다.

코드 :

Class DummyClass { 
    public static $result; 

    function __construct() { 
     $this->_setResultCode('testing'); 
    } 

    public function getResultCode() { 
     return self::$result['code']; 
    } 

    private function _setResultCode($val) { 
     echo 'Im gonna set it to: ' . $val . '<br />'; 
     self::$result['code'] = $val; 
     echo 'I just set it to: ' . $this->getResultCode; 
     die(); 
    } 
} 

출력은 :

Im gonna set it to: testing 
I just set it to: 

여기 무슨 일이야? 이것도 어떻게 가능합니까?


편집 : 문제는 getResultCode를 호출 할 때 내가 괄호를 놓친했다(). 그러나, 나는 지금 또 다른 문제가있다. 나는 DokuClass의 다른 인스턴스에서 나중에 클래스의 resultCode를 얻는 것처럼 보이지 않습니다. 일부 관련이없는 방법을

Class lightweightContactFormPlugin { 

// Set up/Init static $result variable 
public static $result; 

function __construct() { 
    //echo 'I just inited<br/><pre>'; 
    //var_dump($this->getResultCode()); 
    //echo '</pre><br/>'; 
} 

public function run() { 

    // Set default value for resultCode 
    $this->_setResultCode('no_identifier'); 

    // Check if form was posted 
    if(isset($_POST['cfidentifier'])) { 
     $fields = $this->_get_fields_to_send(); 
     $valid = $this->_validate_fields($fields); 

     // Only continue if validatation was successful 
     if($valid == true) { 
      // Store mail result in $mail 
      $mail = $this->_send_mail($fields); 

      // Yay, success! 
      if($mail) { 
       $this->_setResultCode('sent_successfully'); 
       return; 
      } else { 
       // Couldn't send mail, bu-hu! 
       $this->_setResultCode('not_sent'); 
       return; 
      } 
     } 
     $this->_setResultCode('validation_fail'); 
     return; 
    } 
} 


    // Get and Set methods 
public function getResultCode() { 
    return isset(self::$result['code']) ? self::$result['code'] : ''; 
} 

private function _setResultCode($val) { 
    self::$result['code'] = $val; 
} 
} 

왼쪽 : (i가 그 최대 엉망 듯 때문에 더 이상 예제 코드)

여기 내 관련 코드입니다. 다른 메소드가 resultCode를 설정하거나 가져올 수 없으므로 중요하지 않습니다.

왜 내가 $ result [ 'code'] 객체의 다른 인스턴스 (페이지 아래쪽)에 액세스 할 수 없습니까?

내가 그것을 액세스 할 때 나는이 작업을 수행 :

$plugin = new lightweightContactFormPlugin(); 
    $cfstat = $plugin->getResultCode(); 
    echo '<pre>'; 
    var_dump($fstat); 
    echo '</pre>'; 

결과입니다 : 내가 __construct()의 코드를 주석을 해제하는 경우

NULL 

이상한 것은이 올바른 값이 인쇄됩니까됩니다 아웃! 하지만 난 후에 getResultCode()에서 액세스하려고하면 다시 NULL을 반환합니다. 무슨 일 이니?

+0

yourt getResultCode 함수는 아무 것도 반환하지 않습니다. – Najzero

+0

코드의 실수입니다. 방금 알아 챘습니다. 그건 문제가 아니에요, 나는'self :: $ result [ 'code']'를 반환하도록 설정했습니다. 지금 질문에 코드를 수정했습니다. – qwerty

+0

당신은'$ fstat'을 덤프하고 있지만'getResultCode'의 반환 값을'$ cfstat'라는 변수에 씁니다. –

답변

2
echo 'I just set it to: ' . $this->getResultCode; 

내에 반환 난 당신이 여기에 몇 가지 괄호를 놓치고 생각이 없습니다. 이

public function getResultCode() { 
    return self::$result['code']; 
} 

및 사용 $this->getResultCode();

편집

NULL를 돌려주는의 때문에 난 그냥, return;을 쓴 것을 볼 수있는 유일한 문제, 변경 등의

+0

당신에게 내 좋은 사람이라고! – qwerty

+0

@qwerty 답을 확인 하시겠습니까, =)? – blue112

+0

나는 몇 분을 기다려야했다. – qwerty

0

당신은 getResultCode()

+0

그건 실수입니다. 방금 질문을 편집했습니다. blue112가 답을 가지고 있습니다. – qwerty

+0

제 편집물 좀 보실래요? 여전히 문제가 있습니다. – qwerty

0

사용 수익 그것까지

return $this->getResultCode(); 
+0

그건 실수입니다, 방금 질문을 편집했습니다. blue112가 답을 가지고 있습니다. – qwerty

+0

제 편집물을 좀 살펴 보시겠습니까? 여전히 문제가 있습니다. – qwerty

+0

@qwerty하지만 문제가 해결되었다고 말씀하셨습니다. –

0

메소드로 getResultCode()를 호출해야합니다.

echo 'I just set it to: ' . $this->getResultCode(); 
+0

제 편집물을 좀 살펴 보시겠습니까? 여전히 문제가 있습니다. – qwerty

0

A. 코드가 잘못되었습니다 ...

Notice: Undefined property: DummyClass::$getResultCode 

당신은

echo 'I just set it to: ' . $this->getResultCode(); 

를 호출해야이

 function __construct() { 

B. 또한 다음을 반환해야합니다 귀하의 코드가 getResultCode 이후 설정되지 않은해야 PHP에서 __constructor처럼 아무것도 없다 당신의 최종 코드 :

class DummyClass { 
    public static $result; 

    function __construct() { 
     $this->_setResultCode('testing'); 
    } 

    public function getResultCode() { 
     return self::$result['code']; 
    } 

    private function _setResultCode($val) { 
     echo 'Im gonna set it to: ' . $val . '<br />'; 
     self::$result['code'] = $val; 
     echo 'I just set it to: ' . $this->getResultCode(); 
     die(); 
    } 
} 

new DummyClass(); 

출력

Im gonna set it to: testing 
I just set it to: testing 
+0

포인트 A는 실수였습니다. 내 수업에서 코드를 바로 복사하지는 못했습니다. 더미 클래스를 작성하고 getResultCode() 및 _setResultCode() 메소드를 복사했습니다 (약간 변경). 점 B는 유효하지만, 나는 괄호를 잊었다. – qwerty

+0

제 편집물을 좀 살펴 보시겠습니까? 여전히 문제가 있습니다. – qwerty

+0

당신의 코드에서 @qwerty 당신은'$ plugin-> run();'을 호출하고 있습니다. 그래서 어떤 ouput도 반환되지 않았습니다 ...... 참조 : http://codepad.viper-7.com/4VuifJ ​​ – Baba

관련 문제