PHP类的误解

PHP类的误解,php,class,Php,Class,我正在尝试制作一个CMS,我一直在使用PHP中的类 我有一个小小的连接类,我不知道为什么它不起作用。它给了我这个错误的答案: 注意:未定义的变量:第4行C:\Users\eha\Desktop\Carlos'Stuff\xampp\htdocs\test\layout\system\class.php中的mysqli 致命错误:无法访问第4行C:\Users\eha\Desktop\Carlos'Stuff\xampp\htdocs\test\layout\system\class.php中的空

我正在尝试制作一个CMS,我一直在使用PHP中的类

我有一个小小的连接类,我不知道为什么它不起作用。它给了我这个错误的答案:

注意:未定义的变量:第4行C:\Users\eha\Desktop\Carlos'Stuff\xampp\htdocs\test\layout\system\class.php中的mysqli

致命错误:无法访问第4行C:\Users\eha\Desktop\Carlos'Stuff\xampp\htdocs\test\layout\system\class.php中的空属性

好了,现在我得到了调用父元素$mysqli的语法,我正在做父::$mysqli,它告诉我这是一个未声明的变量

class site_manager extends server_connect {
function __construct(&$conect){
    parent::set_connection($conect);
}
public function getContent($page , $sub){   
    if($page == 'home' || ($page != 'home' && $sub ==NULL))
        $qry = "SELECT * FROM public WHERE section = ?";
    else
        $qry = "SELECT * FROM public WHERE section = ? AND subsection = ?";
    $stmt = parent::$mysqli->stmt_init();

当您尝试访问实例变量时,您需要这样做:

$this->mysqli
你在这么做吗

$this->$mysqli

当您尝试访问实例变量时,您需要这样做:

$this->mysqli
你在这么做吗

$this->$mysqli

您有几个问题:首先,您正在使用
$this->$variable
;它应该是
$this->variable
。其次,在一行中使用
$this->$mysqli
,然后在下一行中省略
$this->
,编写
$mysqli
。您需要保留
$this->
;在方法的范围内,
$this->variable
$variable
是两个不同的变量。

您有几个问题:首先,您使用的是
$this->$variable
;它应该是
$this->variable
。其次,在一行中使用
$this->$mysqli
,然后在下一行中省略
$this->
,编写
$mysqli
。您需要保留
$this->
;在方法的范围内,
$this->variable
$variable
是两个不同的变量。

OOP编写的语法是错误的。您需要使用
$this->mysqli
而不是
$this->$mysqli

完整的代码修复程序:

class server_connect {
protected $mysqli = NULL;
    function __construct($host, $user, $password, $database) {
        $this->mysqli = new mysqli($host, $user, $password, $database);
        if ($this->mysqli->connect_error) {
            die('Connect Error (' . $this->mysqli->connect_errno . ') '
                    . $this->mysqli->connect_error);
        }
    }
    protected function set_connection(&$serverconnect){
        $this->mysqli = $serverconnect;
    }   
}

class site_manager extends server_connect {

OOP编写的语法错误。您需要使用
$this->mysqli
而不是
$this->$mysqli

完整的代码修复程序:

class server_connect {
protected $mysqli = NULL;
    function __construct($host, $user, $password, $database) {
        $this->mysqli = new mysqli($host, $user, $password, $database);
        if ($this->mysqli->connect_error) {
            die('Connect Error (' . $this->mysqli->connect_errno . ') '
                    . $this->mysqli->connect_error);
        }
    }
    protected function set_connection(&$serverconnect){
        $this->mysqli = $serverconnect;
    }   
}

class site_manager extends server_connect {

这应该是贯穿始终的
$this->mysqli
。当引用对象的属性时,不需要第二个
$
。不需要,事实上也不能有。除非定义了局部变量
$mysqli
$this->$mysqli
实际上变成
$this->{null}
,或
$this->{'}
。当您使用变量的值作为属性名时,只需要第二个
$
。这应该是
$this->mysqli
。当引用对象的属性时,不需要第二个
$
。不需要,事实上也不能有。除非定义了局部变量
$mysqli
$this->$mysqli
实际上变成
$this->{null}
,或
$this->{'}
。当您使用变量的值作为属性名时,只需要第二个
$
。对于父::op也是这样吗?类似于调用$mysqli parent:$mysqli vs parent::mysqlipublic函数getContent($page,$sub){if($page=='home'| |($page!='home'&&&$sub==NULL))$qry=“SELECT*FROM public WHERE section=?”;else$qry=“SELECT*FROM public WHERE section=?AND subsection=?”;$stmt=parent:$mysqli->stm init();@CarlosArturoAlaniz:
父项:$mysqli
应该是
$this->mysqli
(您可以而且通常应该像使用您的成员一样使用
public
protected
基类成员。主要区别是您不必定义它们,因为基类已经定义了它们。)您可能需要做一些不同的事情的唯一时间是添加自己的东西,这些东西与父类中的东西使用相同的名称。父类::op也是这样吗?就像调用$mysqli parent::$mysqli vs parent::mysqlipublic函数getContent($page,$sub){if($page='home'| |($page!='home'&$sub==NULL))时一样$qry=“SELECT*FROM public WHERE section=?”;else$qry=“SELECT*FROM public WHERE section=?AND subsection=?”;$stmt=parent::$mysqli->stmt_init();@carlosarturotoraniz:
parent:$mysqli
应该是
$this->mysqli
。(您可以并且通常应该使用基类的
public
protected
成员,就像它们是您的成员一样。主要区别在于您不必定义它们,因为基类已经定义了它们。)唯一一次你可能需要做一些不同的事情是如果你添加了你自己的东西,这些东西和父类中的东西同名。