2016-05-04 3 views
0

Поэтому у меня есть этот код:Отсутствующий аргумент 1 для продукта :: __ конструкта()

<?php 
class Product 
{ 
    public $name = 'default_name'; 
    public $price = 0; 
    public $desc = 'default description'; 

    function __construct($name, $price, $desc){ 
     $this->name = $name; 
     $this->price = $price; 
     $this->desc = $desc; 
    } 

    public function getInfo(){ 
     return "Product Name: " . $this->name; 
    } 
} 
$p = new Product(); 
$shirt = new Product("Space Juice T-Shirt", 20, "Awesome Grey T-Shirt"); 
$soda = new Product("Space Juice Soda", 2, "Grape Flavored Thirst Mutilator"); 

echo $shirt->getInfo(); 
?> 

и сообщает PHP "Отсутствующий аргумент 1 для продукта :: __ конструктов()" ошибка. Я получил этот пример на одном из ведущих курсов PHP, и я смущен, потому что в этом простом коде есть ошибка. Помощь будет очень полезна.

+0

здесь '$ p = new Product();' – rray

+0

Ты потрясающий. Большое спасибо. – Seb

+0

Ничего себе, слишком мало аргументов, так плохо, много ошибок: P – rray

ответ

3

В вашем коде, если вы собираетесь создать экземпляр продукта, передача параметров является обязательной. Принимая во внимание, что у вас уже есть значения по умолчанию. Таким образом, сделать его безопасным:

<?php 
class Product 
{ 
    public $name = 'default_name'; 
    public $price = 0; 
    public $desc = 'default description'; 

    function __construct($name = null, $price = null, $desc = null){ 
     $this->name = $name ?: $this->name; 
     $this->price = $price ?: $this->price; 
     $this->desc = $desc ?: $this->desc; 
    } 

    public function getInfo(){ 
     return "Product Name: " . $this->name; 
    } 
} 
$p = new Product(); 
$shirt = new Product("Space Juice T-Shirt", 20, "Awesome Grey T-Shirt"); 
$soda = new Product("Space Juice Soda", 2, "Grape Flavored Thirst Mutilator"); 

echo $shirt->getInfo(); 
?> 
1

Ваша конструкция не позволяет аннулирует для переменных, и поэтому

$p = new Product(); 

вызывает проблему. Он ожидает некоторую ценность, даже если это всего лишь пустые строки, для $ name, $ price и $ desc.

Если вы измените функцию конструктов к этому:

function __construct($name = 'default_name', $price = 0, $desc = 'default description'){ 
    $this->name = $name; 
    $this->price = $price; 
    $this->desc = $desc; 
} 

, то он не должен бросить эту ошибку больше.

Смежные вопросы