PHP __construct不接受变量

时间:2014-09-01 11:47:14

标签: php oop

我似乎无法找到答案,也许有人可以帮助我。

我试图在我database的{​​{1}}中传递construct个连接,但我收到错误class

我尝试使用setter方法设置它完美无缺,因此我知道"Missing argument 1 for item::__construct() "连接的variable是正确的。

我尝试传递database纯文本,例如constructor,然后我就完美了。

我在构造函数中想要它的原因是因为它是一个$item = new item('abc')连接,所以我总是需要它。

database中,代码不在类中,因此问题不在范围内。

这是代码。 的index.php。

index.php

item.php

$dbh = new dbh;
$item = new item($dbh);

提前致谢。

编辑 这是数据库连接类。

<?php
class item{
    protected $costumerId;
    private $databaseConnection;

        public function __construct(dbh $database) {
            $this->databaseConnection = $database;
            var_dump($this->databaseConnection);
        }

        public function setCostumer($costumerId) {
            $this->costumerId = $costumerId;
        }
public function getItems(){
            try {

                $query = 'SELECT * FROM items WHERE costumerId = :costumerId';

                //Execute
                $this->result = $this->databaseConnection->getRows($query, array(':costumerId' => $this->costumerId),'item');
                return $this->result;
            }
            catch(Exception $e) {
                var_dump($e->getMessage());
            }
        }
    }
?>

EDIT 我现在看到即时通讯仅在下一个参数出现时才会收到错误,我的意思是如果我在 class dbh { public $isConnected; public $connection; public function __construct() { try { $this->connection = new PDO ('mysql:host=localhost;dbname=test','username','password'); $this->isConnected = true; var_dump($this->connection); } catch(PDOException $e) { $this->isConnected = false; throw new Exception ($e->getMessege()); } } public function getRows($query, $params=array(), $class = 'assoc') { try { $stmt = $this->connection->prepare($query); $stmt->execute($params); if($class != 'assoc'){ $stmt->setFetchMode(PDO::FETCH_CLASS, $class); return $stmt->fetchall(); } else { $stmt->setFetchMode(PDO::FETCH_ASSOC); return $stmt->fetchall(); } } catch (PDOException $e) { throw new Exception($e->getMessage()); } } } $item = new item($dbh)之后注释掉下一个参数,即{+ 1}}我没有收到错误,

编辑: 好吧,我发现当我调用函数getItems时,或者更空间地,行$items->setCostumer(6);导致错误。但我还是不知道为什么

2 个答案:

答案 0 :(得分:0)

我跑了:

<?php

class item {
    public function __construct($database) {
        $this->db = $database;
        var_dump($this->db);
    }
}

class dbh {

    public $isConnected;
    public $connection;

    public function __construct()
    {
        try {
            $this->connection = new PDO('mysql:host=localhost;dbname=db', 'user', 'password');
            $this->isConnected = true;
            var_dump($this->connection);
        }
        catch(PDOException $e) {
            $this->isConnected = false;
            throw new Exception ($e->getMessege());
        }
    }
 }

$dbh = new dbh();

$item = new item($dbh);

?>

它运作得很好......

object(PDO)#2 (0) {
}
object(dbh)#1 (2) {
["isConnected"]=>
bool(true)
["connection"]=>
object(PDO)#2 (0) {
  }
}

答案 1 :(得分:0)

我不知道你可能已经做了但是你是否将类文件包含在index.php中?如果你做了var_dumps的输出? 也许你的数据库连接抛出异常,如果你没有捕获它它返回一个致命错误,引擎没有达到项目类,你可以请你的PHP错误日志