Php 类中未定义的变量

Php 类中未定义的变量,php,class,variables,undefined,Php,Class,Variables,Undefined,我正在用一个树莓pi来控制我公寓里的闪电,目前我正在编写一个类来控制RGB LED。然而,我遇到了一些麻烦,这个特殊的问题会让我发疯 例如,每当我调用一个函数setRed()时,我都会收到一个通知,在第16行的M:\wamp\www\LedControl\class.rgbcontrol.php中显示notice:Undefined variable:GPIORed 我的类的缩短版本如下所示: class RGBControl { var $GPIORed; var $GPIO

我正在用一个树莓pi来控制我公寓里的闪电,目前我正在编写一个类来控制RGB LED。然而,我遇到了一些麻烦,这个特殊的问题会让我发疯

例如,每当我调用一个函数setRed()时,我都会收到一个通知,在第16行的M:\wamp\www\LedControl\class.rgbcontrol.php中显示
notice:Undefined variable:GPIORed

我的类的缩短版本如下所示:

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");
    }
}
shell_exec("echo \"$GPIOBlue=$power\" > /dev/pi-blaster");
这里是基本用法,我用参数24、23、18(我的LED连接到的Raspberry Pi上的GPIO引脚)定义这个类

但是我做错了什么呢?

像这样的台词:

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");
    }
}
shell_exec("echo \"$GPIOBlue=$power\" > /dev/pi-blaster");
正在尝试解析名为
$GPIOBlue
$power
的变量,但
$GPIOBlue
不存在。您需要使用
$this
来访问实例成员变量。比如说,

shell_exec("echo \"{$this->GPIOBlue}=$power\" > /dev/pi-blaster");
这样的台词:

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");
    }
}
shell_exec("echo \"$GPIOBlue=$power\" > /dev/pi-blaster");
正在尝试解析名为
$GPIOBlue
$power
的变量,但
$GPIOBlue
不存在。您需要使用
$this
来访问实例成员变量。比如说,

shell_exec("echo \"{$this->GPIOBlue}=$power\" > /dev/pi-blaster");
您正在尝试访问shell解释器范围内的$GPIORed变量。它只能通过php访问。正如Dan提到的,这是一个范围引用问题。我的错

我建议使用文件操作,而不是使用shell_exec,部分原因是安全性,部分原因是可读性

file_put_contents("/dev/pi-blaster", "{$this->GPIORed}=$power\n");
您正在尝试访问shell解释器范围内的$GPIORed变量。它只能通过php访问。正如Dan提到的,这是一个范围引用问题。我的错

我建议使用文件操作,而不是使用shell_exec,部分原因是安全性,部分原因是可读性

file_put_contents("/dev/pi-blaster", "{$this->GPIORed}=$power\n");


数组
$color
从何而来?@girlwithglasses不重要-这不是直接问题的一部分…我也会设置三个
var
的可见性。(虽然不是答案的一部分)@hd。您能解释一下可见性的含义吗?例如,
public$var
private$var
protected$var
。看看数组
$color
是从哪里来的?@girlwithglasses不重要-这不是直接问题的一部分…我还设置了三个
var
的可见性。(虽然不是答案的一部分)@hd。您能解释一下可见性的含义吗?例如,
public$var
private$var
protected$var
。请看,我并没有真正尝试在shell解释器的范围内访问,因为我假设php将用24替换$GPIORed,就像它用$power一样。我将考虑FielePtux内容,但是我必须先运行一些速度测试:“代码>文件FielpPuthCypult<代码>绝对是比<代码> SHILLYEXCER 更好的方法,不管性能如何(尽管如果速度较慢,我会感到震惊)。shell\u exec有太多问题。我的错误,更多的是理论。我一直对执行shell很谨慎。为了安全起见,在将整数值写入/dev/pi blaster之前,我会添加一个整数值检查:@NuclearPeon是的,我正在这样做,但我在发布之前简化了课程,因为我知道这不是问题:)@Dan猜猜看,你不需要感到震惊。我用microtime()运行了一些测试,文件内容的结果是
时间:0.0003秒
,shell执行的结果是
时间:0.0132秒
。所以它只快了几倍;)但是shell_exec并没有那么慢,所以我就这样做了,这很好。我并没有真正尝试在shell解释器的范围内访问,因为我假设php将用24替换$GPIORed,就像它用$power一样。我将考虑FielePtux内容,但是我必须先运行一些速度测试:“代码>文件FielpPuthCypult<代码>绝对是比<代码> SHILLYEXCER 更好的方法,不管性能如何(尽管如果速度较慢,我会感到震惊)。shell\u exec有太多问题。我的错误,更多的是理论。我一直对执行shell很谨慎。为了安全起见,在将整数值写入/dev/pi blaster之前,我会添加一个整数值检查:@NuclearPeon是的,我正在这样做,但我在发布之前简化了课程,因为我知道这不是问题:)@Dan猜猜看,你不需要感到震惊。我用microtime()运行了一些测试,文件内容的结果是
时间:0.0003秒
,shell执行的结果是
时间:0.0132秒
。所以它只快了几倍;)但是shell_exec并没有那么慢,所以我开始了,这很好。当然。我确实读过一些关于类似问题的问题,它们都用$this->Variable解决了这个问题,但我无法连接这些点。。。我在类内部遇到了问题,其他人试图访问类外部的变量。当然。我确实读过一些关于类似问题的问题,它们都用$this->Variable解决了这个问题,但我无法连接这些点。。。我在类本身内部遇到问题,其他人试图访问类外部的变量。