私は検索し、この質問を見つけました。それは私を助けました: php静的変数が設定されていません
しかし、それは私の問題全体を解決するものではありませんでした。
コード:
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()を呼び出すときに括弧が欠落していたことでした。しかし、私は今別の問題を抱えています。resultCodeをクラスから取得できないようです(後でDummyClassの別のインスタンスで)。
これが私の関連するコードです(私はそれを台無しにしたようだったので、これ以上のサンプルコードはありません):
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;
}
}
いくつかの無関係な方法を省きました。他のメソッドはresultCodeを設定または取得しません。問題ではありません。
オブジェクトの別のインスタンス(ページのさらに下)で$ result ['code']にアクセスできない理由はありますか?
私はそれにアクセスするときにこれを行います:
$plugin = new lightweightContactFormPlugin();
$cfstat = $plugin->getResultCode();
echo '<pre>';
var_dump($fstat);
echo '</pre>';
結果は次のとおりです。
NULL
奇妙なことに、__construct()のコードのコメントを外すと、正しい値が出力されます。しかし、後でgetResultCode()からアクセスしようとすると、再びNULLが返されます。何が起こっている?