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() 时错过了括号。但是,我现在有另一个问题。我似乎无法从类中获取 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() 作为方法。

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

A. 你的代码是错误的......__constructor它应该是 PHP中的任何东西

     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 回答
0

你没有回报getResultCode()

于 2012-10-10T15:37:03.800 回答
0

像这样使用返回

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

并使用$this->getResultCode();

编辑

我能看到的唯一问题是你刚刚写return;了,因为它返回了NULL,把它改成

return $this->getResultCode();
于 2012-10-10T15:38:34.630 回答