2015-08-28 72 views
0
<?php 
    class Apple 
    { 
     public function showColor() 
     { 
      return $this->color; 
     } 
    } 

    class Banana 
    { 
     public $color; 

     public function __construct() 
     { 
      $this->color = "Banana is yellow"; 
     } 

     public function GetColor() 
     { 
      return Apple::showColor(); 
     } 
    } 

    $banana = new Banana; 
    echo $banana->GetColor(); 
?> 

我不知道Apple蘋果怎麼能從香蕉中獲得$ this-> color。在這個例子中,php類怎麼能通過這個值

+0

咦......? Apple在哪裏定義顏色? – zeflex

+0

此外,你正在使用GetColor()內的靜態調用和showColor()是非靜態的...糟糕的方式來代碼 – zeflex

+0

有沒有在蘋果的顏色定義,但如果你運行此代碼,輸出是香蕉是黃色,這意味着顏色已經傳遞給蘋果類 –

回答

0

香蕉類:

public function GetColor() 
      { 
       return Apple::showColor($this); 
      } 

蘋果類:

public static function showColor($banana) 
     { 
      return $banana->color; 
     } 
0

的東西是在你的代碼真的錯了。

在語法上,你的代碼不好。

應該是這樣的:

<?php 
    class Apple 
    { 
     public function showColor() 
     { 
      return $this->color; 
     } 
    } 

    class Banana 
    { 
     public $color; 

     public function __construct() 
     { 
      $this->color = "Banana is yellow"; 
     } 

     public function GetColor() 
     { 
      $apple = new Apple(); 
      return $apple->showColor(); 
     } 
    } 

    $banana = new Banana; 
    var_dump($banana->GetColor()); 
?> 

有了這個良好的語法,你不能因爲沒有顏色在蘋果類中定義得到任何價值。

+0

謝謝你的回覆,如果你運行我的代碼,你會得到的值:香蕉是黃色的。這是我的問題如何可以將$顏色傳遞給showcolor() –

+0

嗯,我不能真正告訴你,因爲我不是專家,但事實是,因爲代碼語法是錯誤的,你應該修復它,而不是明白你爲什麼得到價值。 – zeflex

+0

@JingweiHu要將變量傳遞給函數,需要將它添加到函數的參數列表中!作爲@DannyPhantom [已經建議](http://stackoverflow.com/a/32262606/3709765):)但是,你的代碼的語義和邏輯似乎不是在良好的編程實踐的方向!我的意思是,一個'Banana'類不應該從'Apple'類獲得它的顏色值,或者你打算做其他事情,也許已經使用了一些不相關的語義! – someOne

0

這是怎麼Apple類從Banana類得到color: 其實,如果你運行具有E_STRICT錯誤報告開啓代碼,生成警告說:

非靜態方法Apple::showColor()不應該靜態調用, 假設$this從不相容的背景下...

這意味着,PHP解釋器注塑$thisBanana類型爲不兼容的Apple對象。 「不兼容類型鑄造」就像將Banana的類型名稱重命名爲類型名稱Apple$thisBanana類型)的字段爲colorApple類型的新鑄造對象也是如此。

從概念上講,這是什麼解釋呢:

class Banana 
{ 
    . 
    . 
    . 
    public function GetColor() 
    { 
     $apple = cast($this, 'Apple'); // There is no such a cast() function in PHP, 
             // it is for demonstration purposes only! 
             // The $apple now has what $this already have!! 
     return $apple->showColor(); 
    } 
}