类中未定义的变量

时间:2014-08-19 17:35:22

标签: php class variables undefined

我使用覆盆子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);

但是我做错了什么?

2 个答案:

答案 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");