我无法从PHP7中同一个类中声明为public的方法访问变量,到目前为止,我有以下内容:
class H {
public $Q=array();
public function __construct(){
parent::__construct();
$Q[]="SELECT";
}
private function sas(){
if(isset($_REQUEST['n']) && $_REQUEST['n']!=""){
$q=$this->query($_REQUEST['n']);
}
}
private function query($n){
if($n==="a")
return $Q[0];
}
}
调用sas()
后,收到以下错误消息<b>Notice</b>: Undefined variable: Q in <b>C:\xampp\apache\apps\a.php</b> on line <b>66</b><br />
。请帮忙!!
答案 0 :(得分:5)
根据@ Rizier123的评论$Q
需要$this->Q
。要访问数组的第一个元素,请使用$this->Q[0]
。每次您访问类中的公共变量(或任何其他实例变量)时,您都需要指定$this
才能引用当前对象。
答案 1 :(得分:3)
您的代码存在许多问题。我更改了您的代码,并进行了以下测试class
:
class H {
public $Q=array();
public function __construct(){
//parent::__construct();
$this->Q[]="SELECT";
}
// changed from 'private' to 'public'.
// Also passing in $n (for example code only).
public function sas($n){
if(isset($n) && $n!=""){
$this->query($n);
}
}
// Not sure what you are trying to do, so changed code to make
// things clear when stuff changed.
private function query($n){
if ($n==="a")
$this->Q[0] = "changed";
}
}
$h = new H();
$h->sas("a");
$x = new H();
$x->sas("x");
echo '<pre>';
var_dump($h->Q);
var_dump($x->Q);
echo '</pre>';
结果是:
array(1) {
[0]=>
string(7) "changed"
}
array(1) {
[0]=>
string(6) "SELECT"
}
希望这有帮助。
答案 2 :(得分:2)
这是基本规则:
$this->classMembers
在你的情况下是:
$this->Q
$this->Q[0]