2016-12-27 2 views
0

Даже с ошибками var_dump все еще работает. Кажется, все работает, но я получаю эти две ошибки, которые повторяются 4 раза.Ошибка PHP: Отсутствует аргумент 1, хотя я передаю переменную

Ошибки:

Warning: Missing argument 1 for Product::__construct() in Product.php on line 13

Notice: Undefined variable: attributes in Product.php on line 14

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 
    } 
} 

EDIT:

У меня было 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

Вы не определили, если атрибуты $ имеет тип массива или нет, пожалуйста, определить и вы не получите эти предупреждения – Rahul

+2

я не могу воспроизвести ошибки. Вы уверены, что не используете экземпляр продукта где-то раньше без переменной? @Rahul type-hinting не решит этого. –

+0

Код, который вы показали как работает как ожидалось, без каких-либо предупреждений или уведомлений. –

ответ

1

Если вы хотите PDO, чтобы создать пользовательский экземпляр объекта вы должны передать аргументы конструктора. В PDOStatement::fetchAll() это третий параметр:

public array PDOStatement::fetchAll ([ int $fetch_style [, mixed $fetch_argument [, array $ctor_args = array() ]]])

[...]

ctor_args Arguments of custom class constructor when the fetch_style parameter is PDO::FETCH_CLASS.