即使错误var_dump
仍然有效。一切似乎都有效,但我发现这两个错误重复了4次。
错误:
警告:在第13行的Product.php中缺少Product :: __ construct()的参数1
注意:未定义的变量:第14行的Product.php中的属性
的index.php:
$products = $query->selectAll('products');
foreach ($products as $product) : ?>
<li><?= $product->title; ?></li>
<?php endforeach;
$arr = [
'type' => 'Furniture',
];
$furniture = new Product($arr);
var_dump($furniture->type);
Product.php:
class Product
{
public $type;
public function __construct($attributes) { // line 13
$this->type = $attributes['type']; // line 14
}
}
修改
我之前的测试中有return $query->fetchAll(PDO::FETCH_CLASS, "Product");
,只需从中删除“产品”。
当我删除评论 index.php 的这一部分时,错误消失了:
$products = $query->selectAll('products');
foreach ($products as $product) : ?>
<li><?= $product->title; ?></li>
<?php endforeach;
selectAll()方法:
public function selectAll($table)
{
$query = $this->pdo->prepare("SELECT * FROM `$table`");
$query->execute();
return $query->fetchAll(PDO::FETCH_CLASS, "Product");
}
答案 0 :(得分:1)
如果您希望PDO创建自定义对象实例,则必须传递构造函数参数。在PDOStatement::fetchAll()中,它是第三个参数:
public array PDOStatement::fetchAll ([ int $fetch_style [, mixed $fetch_argument [, array $ctor_args = array() ]]] )
[...]
ctor_args
fetch_style时自定义类构造函数的参数 参数是PDO :: FETCH_CLASS。