无法访问PHP中的public var

时间:2016-01-12 23:07:41

标签: php

我无法从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 />。请帮忙!!

3 个答案:

答案 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]