我搜索了一下,发现了这个问题,这对我有帮助: 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。到底是怎么回事?