我使用覆盆子pi来控制我公寓里的闪电,目前我正在编写一个类来控制RGB Leds。但是,我遇到了一些麻烦,这个特殊的问题会让我发疯。
每当我调用一个函数setRed()时,我会收到一条说Notice: Undefined variable: GPIORed in M:\wamp\www\LedControl\class.rgbcontrol.php on line 16
我班级的缩短版本如下:
class RGBControl {
var $GPIORed;
var $GPIOGreen;
var $GPIOBlue;
public function __construct($red,$green,$blue) {
$this->GPIORed = $red;
$this->GPIOGreen = $green;
$this->GPIOBlue = $blue;
}
public function setRed($power){
shell_exec("echo \"$GPIORed=$power\" > /dev/pi-blaster");
}
public function setGreen($power){
shell_exec("echo \"$GPIOGreen=$power\" > /dev/pi-blaster");
}
public function setBlue($power){
shell_exec("echo \"$GPIOBlue=$power\" > /dev/pi-blaster");
}
}
所以这里是基本用法,我用参数24,23,18定义了这个类(Raspberry Pi上的GPIO引脚是我的LED连接的。)
$LED = new RGBControl (24,23,18);
$LED->setRed($color[0] / 255);
$LED->setGreen($color[1] / 255);
$LED->setBlue($color[2] / 255);
但是我做错了什么?
答案 0 :(得分:4)
这样的界线:
shell_exec("echo \"$GPIOBlue=$power\" > /dev/pi-blaster");
正在尝试解析名为$GPIOBlue
和$power
的变量,但$GPIOBlue
并不存在。您需要使用$this
来访问实例成员变量。例如,
shell_exec("echo \"{$this->GPIOBlue}=$power\" > /dev/pi-blaster");
答案 1 :(得分:1)
public function setRed($power){
shell_exec("echo \"$GPIORed=$power\" > /dev/pi-blaster");
}
您正在尝试访问shell解释器范围内的$ GPIORed变量。它只能通过php访问。 就像Dan提到的那样,它是一个范围参考问题。我的坏。
我建议使用文件操作而不是使用shell_exec,部分原因是出于安全性,部分原因是因为可读性。
file_put_contents("/dev/pi-blaster", "{$this->GPIORed}=$power\n");