PHP类中的数据成员不会被分配?

时间:2011-03-09 19:43:48

标签: php

我是新来的,但是一个奇怪的井问题让我把头撞在墙上。 我也是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。

也许我需要单身或静态?

1 个答案:

答案 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) ""