2010-04-29 70 views
0

我正在研究一個十六進制顏色類,您可以在其中更改任何十六進制代碼顏色的顏色值。在我的例子中,我還沒有完成十六進制數學,但它與我在這裏解釋的內容並不完全相關。天真地,我想開始做一些我認爲不能做的事情。我想在方法調用中傳遞對象屬性。 這可能嗎?在類中通過引用傳遞變量?在php

class rgb { 

     private $r; 
     private $b; 
     private $g; 

     public function __construct($hexRgb) { 
       $this->r = substr($hexRgb, 0, 2); 
       $this->g = substr($hexRgb, 2, 2); 
       $this->b = substr($hexRgb, 4, 2); 
     } 

     private function add(& $color, $amount) { 
      $color += amount; // $color should be a class property, $this->r, etc. 
     } 

     public function addRed($amount) { 
       self::add($this->r, $amount); 
     } 

     public function addGreen($amount) { 
       self::add($this->g, $amount); 
     } 

     public function addBlue($amount) { 
       self::add($this->b, $amount); 
     } 
} 

如果無法做到這一點在PHP中,這是什麼叫在什麼語言這可能嗎?

我知道我可以做這樣的事情

public function add($var, $amount) { 
    if ($var == "r") { 
     $this->r += $amount 
    } else if ($var == "g") { 
     $this->g += $amount 
    } ... 
} 

但我想這樣做,這種冷靜的方式。

+1

我剛測試出來,它似乎工作...我今天感覺像l33t h4X0r! – user151841 2010-04-29 15:17:21

+0

你是精英haxx0r,因爲我今天自己想過這個! – r3wt 2014-12-19 20:39:34

回答

3

這是完全合法的PHP代碼,它被稱爲pass by reference,並支持多種語言。在PHP中,你甚至可以做這樣的事情:

class Color { 
    # other functions ... 
    private function add($member, $value) { 
     $this->$member += $value; 
    } 
    public function addGreen($amount) { 
     $this->add('g', $amount); 
    } 
} 

我會進一步使用hexdec()的值在構造函數轉換爲十進制。

0

只是這樣做:

public function add($var, $amount) { 
    if(property_exists(__CLASS__,$var)) $this->$var += $amount; 
}