2010-04-29 14 views
0

Je travaille sur une classe de couleur hexadécimale où vous pouvez changer les valeurs de couleur de n'importe quelle couleur de code hexadécimal. Dans mon exemple, je n'ai pas terminé les maths en hexadécimal, mais ce n'est pas complètement pertinent par rapport à ce que j'explique ici. Naïvement, je voulais commencer à faire quelque chose que je ne pense pas pouvoir faire. Je voulais passer des propriétés d'objet dans un appel de méthode. Est-ce possible?passer variable par référence au sein de la classe? en 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); 
     } 
} 

Si cela est impossible en PHP, ce qui est appelé et cela est-il possible dans quelles langues?

Je sais que je pouvais faire quelque chose comme

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

Mais je veux le faire de cette façon cool.

+1

Je viens de le tester et il semble fonctionner ... Je me sens comme un l33t h4X0r aujourd'hui! – user151841

+0

vous êtes une élite haxx0r, parce que j'ai pensé à cela aujourd'hui moi-même! – r3wt

Répondre

3

Ceci est parfaitement code juridique PHP, il est appelé pass by reference et est disponible dans de nombreuses langues. En PHP, vous pouvez même faire quelque chose comme ceci:

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

Je encore utiliser hexdec() pour convertir les valeurs de votre constructeur en décimal.

0

Il suffit de faire ceci:

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