无法访问父成员

时间:2015-05-25 09:44:23

标签: php oop pdo php-5.4

我有一个配置文件,我在其中定义我的数据库配置。 我的配置文件是

<?php
$config['database']="mydb";
$config['host']="localhost";
$config['username']="root";
$config['password']="";
?>

我有一个配置类,我在分配配置设置,我的配置类就像

class Config {
    //put your code here
    protected  $host = "";
    protected  $user = "";
    protected  $password = "";
    protected  $database = "";


    protected function __construct(){
         include_once  'configuration.php';
        $this->host=$config['host'];
        $this->user=$config['username'];
        $this->password=$config['password'];
        $this->database=$config['database'];
    }

}

现在我正在尝试建立与我的连接类的数据库连接,如

include_once 'Config.php';
class Connection extends Config{


    private $conn;

    function __construct() {
        parent::__construct();
        try {

            $this->conn = new PDO("mysql:host=$this->host;dbname=$this->database", $this->user, $this->password);
        } catch (PDOException $pe) {
            echo "Error connecting to database. " . $pe->getMessage();
        }
    }

    function getConnectionObject() {
        return $this->conn;
    }

    public function destroyConn() {
        $this->conn = null;
    }

}

我的问题是,当我尝试为进一步的类获取此连接时,它向我显示空白对象 我的访问数据库连接对象的代码是

  class Functions extends Connection {
        private $conOb;

            function __construct() {
                parent::__construct();
                $this->conOb = parent::getConnectionObject();
            }

            function getConnectionObject() {
                parent::getConnectionObject();
            }

}

如果我在连接类中定义数据库配置,我可以在我的Function类中访问我的连接对象,但是如果我试图通过配置文件设置它来获取Null连接对象。

请告诉我错误的地方。提前谢谢。

1 个答案:

答案 0 :(得分:2)

您错过了return关键字

class Functions extends Connection {
    private $conOb;

    function __construct() {
        parent::__construct();
        $this->conOb = parent::getConnectionObject();
    }

    function getConnectionObject() {
        return parent::getConnectionObject();
    }

}

顺便说一句,如果您不添加任何内容,则无需重新声明方法getConnectionObject()

您可以这样做:

class Functions extends Connection {

    function __construct() {
        parent::__construct();
    }

}

$db = new Functions();
$dbh = $db->getConnectionObject();

如果您在类$conn中将属性protected的可见性更改为Connection,则可以在子类中使用您的连接:

class Functions extends Connection {

    function __construct() {
        parent::__construct();
    }

    function doSomething() {
        $this->conn->query('SELECT....');
    }

}

作为旁注,我建议您查看PHP coding style standards