2011-03-09 15 views
0

我在這裏是新人,但是一個奇怪的問題讓我把頭撞在牆上。 我也是PHP新手,在C#和C中有一些經驗。 但是,我的問題是相當基本的變量處理,更明確地分配給變量。PHP類中的數據成員不會被分配?

比方說,我們有一個代碼如下:

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結束後,設置爲空?我在PHP中丟失了什麼明顯的東西?在使用監視變量的Visual Studio中,我可以更輕鬆地辨別出問題。

編輯:嗯我真的不知道你是什麼意思,得到我測試這個類的過程。由於PHP中沒有監視變量,我只需更正然後運行php腳本。所謂的F5測試:D。

但是我確實有一個問題的概念,層次結構是PrebaciApp擴展窗體,它擴展了包含Widget對象的集合(數組)的WidgetContainer。

所以這是很多張貼在這裏。

但方法實際上是在按下網頁上的按鈕後調用的,我認爲這是通過Form或其他類發送的,然後調用PrebaciApp。我認爲唯一合乎邏輯的解釋是,起始網頁然後調用另一個PrebaciApp實例,它在null上有$操作。

也許我需要單身或靜態?

+0

什麼是兩個星號?我以前沒見過。 – Adam 2011-03-09 19:48:26

+0

另外,你的意思是寫'$ this-> operacija'?在'onEqual'中的 – Adam 2011-03-09 19:49:54

+0

中,您有不同的名稱'operacija',並且您還可以將代碼示例放在您使用此PrebaciApp對象的位置。 – jcubic 2011-03-09 19:56:05

回答

1

也許這是你的Form類中的東西?我運行了這個測試,並添加了輸出。這是我的預期...

蘇里,我貼錯了版本。下面是我使用的文件:

<?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) "" 
+0

我確實修復了一些東西,比如錯字和**等等...... – Nanne 2011-03-09 19:57:41

+0

嗯謝謝,我會盡力檢查這個。我會給你1,但似乎我需要更多的代表:D。 – Romulus 2011-03-09 19:58:37

相關問題