Php 类中未定义的变量
我正在用一个树莓pi来控制我公寓里的闪电,目前我正在编写一个类来控制RGB LED。然而,我遇到了一些麻烦,这个特殊的问题会让我发疯 例如,每当我调用一个函数setRed()时,我都会收到一个通知,在第16行的M:\wamp\www\LedControl\class.rgbcontrol.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
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解决了这个问题,但我无法连接这些点。。。我在类本身内部遇到问题,其他人试图访问类外部的变量。