可以在不同的类__construct中使用函数吗?

时间:2014-05-02 23:47:08

标签: php function class pdo

EDIT :::
所以我有课程,我想一起工作。我的前两个建立了与数据库的连接:


dbconn.php

<?php

class dbconn {
    protected $dbname;
    protected $dbuser;
    protected $dbpassword;
    protected $dbhost;
    protected $connection;

    public function __construct($dbhost, $dbname, $dbuser, $dbpass) 
    {
        $this->dbname = $dbname;
        $this->dbhost = $dbhost;
        $this->dbuser = $dbuser;
        $this->dbpass = $dbpass;
        $this->connect();
    }

    public function getConnection()
    {
        return $this->connection;
    }

    protected function connect()
    {
        $this->connection = new PDO("mysql:host={$this->dbhost};dbname={$this->dbname}", $this->dbuser, $this->dbpass);
    }
}
?>


dblogin.php

<?php

$db = new DBconn('localhost','phpproject','carl','pdt1848?')

?>

我的其他课程正在尝试编辑数据库中的项目。我试图通过这个类的__construct链接数据库连接类,我只是显然是这样做的。
editbeers.php

<?php

class BeerEditor
{
    protected $dbconn;

    function __construct($dbconn){
        $this->dbconn = $dbconn;
    }

    function addBeer(Beer $beerObj){
        //making connection to db here
        $conn = $this->dbconn->getConnection();

        $stmt = $conn->prepare("INSERT INTO beers (beer_name, beer_type, beer_abv, beer_rating) VALUES (:beer_name, :beer_type, :beer_abv, :beer_rating)");

        $stmt->bindParam(':beer_name', $beerObj->getBeerName());
        $stmt->bindParam(':beer_type', $beerObj->getBeerType());
        $stmt->bindParam(':beer_abv', $beerObj->getBeerABV());
        $stmt->bindParam(':beer_rating', $beerObj->getBeerRating());

        $result = $stmt->execute();

        if($result === false){
            var_dump($conn->errorCode());
        }

        return $result;
    }

    function listBeers(){

        $conn = $this->dbconn->getConnection();
        $result = $conn->query('SELECT * FROM beers');

        $result->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 'beers');
        $beers = $result->fetchAll();

        return $beers;
    }


}
?>

3 个答案:

答案 0 :(得分:1)

  1. 在您引用的第二个文件中,您实际上从未创建$dbconn。如果您认为它应该在/home/carlton/public_html/PHPproject/allincludes.php内的某处创建,那么您应该仔细检查一下。

  2. 您的构造函数可以在允许存储之前检查传递给它的信息是否有效。

答案 1 :(得分:0)

由于$dbconn未定义且不是数据库连接对象,因此您无法调用方法getConnection()

创建BeerEditor时,您需要传入数据库连接对象。

$BeerEditor= new BeerEditor($dbconn);

答案 2 :(得分:0)

或许$ dbconn var在您所需的文件中的某处定义。 试试

var_dump($dbconn);
在需求之后

并查看它是否是您期望的对象。