使用私有和公共的PHP Connection类

时间:2015-05-10 16:39:40

标签: php mysql oop access-modifiers

代码:

class mysql_db{
    private $conn;
    private function connect(){
        if(isset($this->$conn)){
            $this->$conn = new mysqli("localhost", "php_user", "php_pass", "db");
            if($this->$conn->connect_error)
                die("Connection failed: " . $this->$conn->connect_error);
        }
    }
    private function disconnect(){
        $this->$conn->close();
        unset($this->$conn);
    }

    public function getContent(){
        $this->connect();
        $stmt = $this->$conn->prepare("SELECT * FROM content");
        if($stmt->execute()){
            $stmt->bind_result($id, $type, $title, $text, $inserted);
            while($stmt->fetch()){
                printf("%s %s %s %s %s\n",$id, $type, $title, $text, $inserted);
            }
        }
        disconnect();
    }
}

$db = new mysql_db();
$db->getContent();

结果:

Notice: Undefined variable: conn in db.php on line 5
Notice: Undefined variable: conn in db.php on line 18
Fatal error: Cannot access empty property in db.php on line 18

问题:

  

为什么会发生这种情况,以及如何解决?

目标:

  

创建连接类,同时限制用户仅使用PUBLIC   功能。保持对其内部数据库的所有访问权限。

编辑: 解决方案:It was only $ mistake.

1 个答案:

答案 0 :(得分:1)

你不应该两次使用$ sign。

$this->$conn =

应该是

$this->conn =

$表示引用一个变量,如果你已经引用它,它不需要它两次,就会出错。

也可以在第18行使用它。 $this->conn->prepare("SELECT * FROM content");

使用$this->disconnect();,因为它不是您的自定义功能。您需要断开当前对象,因此请使用$ this。