我是新来的,但是一个奇怪的井问题让我把头撞在墙上。 我也是PHP的新手,以前有过C#的经验,还有一些有C. 然而,我遇到的问题是相当基本的变量处理,更明确地分配给变量。
假设我们的代码如下:
class PrebaciApp extends Form {
public $operation;
public function getOperation(){
return $this->operation;
}
public function setOperation($setOp){
$this->operation=$setOp;
}
public function __construct() {
$this->addWidget(new HiddenBox('hidden'));
$this->addWidget(new TextBox('text1'));
$this->addWidget(new Button('btn1', '+', 'onPlus'));
$this->addWidget(new Button('btn2', '-', 'onMinus'));
$this->addWidget(new Button('btn3', '=', 'onEq'));
}
public function onPlus() {
$this->setOperation('+');
**var_dump($this->operation);**
}
public function onMinus() {
$this->setOperation('-');
}
protected function onEqual() {
**var_dump($this->operation);**
switch ($this->operacija) {
case '+':
//some logic
case '-':
//some logic
case '*':
//some logic
}
$this->operation='';
}
}
?>
让我们假设第一个被调用的方法是onPlus或onMinus,然后是onEqual。 现在由于某种原因,onEqual方法中的var_dump表示为null,而onPlus中的var_dump表示字符串,而'+'表示正确。
所以我的问题是,为什么$操作,在onPlus或onMinus的方法结束后,被设置为null?我在PHP中遗漏了哪些东西?在具有观察变量的Visual Studio中,我可以更容易地识别问题。
编辑:嗯我真的不知道你通过我测试这个课程的过程是什么意思。由于PHP中没有观察变量,我只需更正然后运行php脚本。所谓的F5测试:D。
但是我确实有一个问题的概念,层次结构是PrebaciApp extends Form,它扩展了WidgetContainer,它保存了Widget对象的集合(数组)。
所以在这里发布很多内容。
但是这些方法实际上是在按下网页本身的按钮后调用的,我认为这是通过Form或其他类发送的,然后调用PrebaciApp
。我认为唯一合乎逻辑的解释是,起始网页会调用另一个PrebaciApp实例,该实例的$操作为null。
也许我需要单身或静态?
答案 0 :(得分:1)
也许它是你的Form类中的东西?我运行了这个测试,并添加了输出。这是我所期待的......
SOrry,我粘贴了错误的版本。这是我使用的文件:
<?php
class PrebaciApp{
public $operation;
public function setOperation($setOp){
$this->operation=$setOp;
}
public function __construct() {
}
public function onPlus() {
$this->setOperation('+');
var_dump($this->operation);
}
function onEqual() {
var_dump($this->operation);
switch ($this->operation) {
}
$this->operation='';
var_dump($this->operation);
}
}
$prebaciApp = new PrebaciApp();
$prebaciApp->onPlus();
$prebaciApp->onEqual();
?>
和输出:
string(1) "+"
string(1) "+"
string(0) ""