PHP错误:缺少参数1,即使我传递变量

时间:2016-12-27 11:27:27

标签: php oop

即使错误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");
}

1 个答案:

答案 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。