我只是一个偶尔的PHP开发人员。现在,在处理遗留应用程序时,我遇到了以下问题,这看起来非常愚蠢。但是我不能让$someString类变量保持正确的值:
class MyClass{
var $someString;
function doSomething(){
//$this->setString(); //this is effectively not called here, but later in getIframe()
$this->buildIframe();
echo $this->someString; //actually, I need someString here, but it is empty
}
function setString(){
$this->someString = "something";
}
function buildIframe(){
$content .= <iframe....>;
}
function getIframe(){
$this->setString();
}
}
$myClassInstance = new MyClass();
$myClassInstance->doSomething();
$myClassInstance->getIframe();
就我所知,doSomething()是在类上下文中调用的,正如我所展示的。
我做错了什么?
编辑:我审查了代码,我想我找到了导致这种情况的原因。html输出中嵌入了一个iframe,它在一个部分生成,稍后调用。所以setString()方法实际上并没有立即调用,我首先想到的是在调用iframe代码时。这就是为什么在我需要字符串输出的地方它是不可用的。
我猜就像现在的代码一样,除了在getIframe()方法中,没有办法得到$someString的输出。
这个代码是100%正确和工作。我已经在PHP 5上检查过了。它在字符串中返回"某物"。这是正确的行为。
从手册:注意:出于兼容性原因,PHP 4仍然支持使用var关键字声明变量的方法(作为public关键字的同义词)。在5.1.3之前的PHP 5中,使用它会生成E_STRICT警告。