0

私は検索し、この質問を見つけました。それは私を助けました: 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が返されます。何が起こっている?

4

5 に答える 5

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

ここでいくつかの括弧が欠落していると思います。

于 2012-10-10T15:37:53.227 に答える
0

内に戻ることはありませんgetResultCode()

于 2012-10-10T15:37:03.800 に答える
0

このようにreturnを使用します

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

と使用$this->getResultCode();

編集

私が見ることができる唯一の問題はあなたがちょうど書いreturn;たということです、それが戻るので、NULLそれをに変えてください

return $this->getResultCode();
于 2012-10-10T15:38:34.630 に答える
0

メソッドとしてgetResultCode()を呼び出す必要があります。

    echo 'I just set it to: ' . $this->getResultCode();
于 2012-10-10T15:39:12.113 に答える
0

A.あなたのコードは間違っています... __constructorPHPにはあるべきものはありません

     function __construct() {

B.getResultCode設定されていないため、コードは次の値も返す必要があります

    Notice: Undefined property: DummyClass::$getResultCode 

あなたは電話する必要があります

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

あなたの最終コード:

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 
于 2012-10-10T17:24:57.547 に答える