我正在使用十六进制颜色类,您可以在其中更改任何十六进制代码颜色的颜色值。在我的例子中,我还没有完成十六进制数学,但它与我在这里解释的内容并不完全相关。
天真地,我想开始做一些我认为无法做到的事情。我想在方法调用中传递对象属性。 这可能吗?
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
} ...
}
但我想这样做很酷。
答案 0 :(得分: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()
将构造函数中的值转换为十进制。
答案 1 :(得分:0)
这样做:
public function add( $var, $amount ) {
if(property_exists(__CLASS__,$var)) $this->$var += $amount;
}