我似乎无法找到答案,也许有人可以帮助我。
我试图在我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);
导致错误。但我还是不知道为什么
答案 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错误日志