2016-05-04 15 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の主要なコースの一つでこの例を得て、この単純なコードのどこかにエラーがあるように思われるので、私は混乱しています。ヘルプは多くのappriciatedされるだろう。

+0

ここに '$ p = new Product();' – rray

+0

あなたは素晴らしいです。どうもありがとうございました。 – Seb

+0

うわー、引数が少なすぎる、悪い、多くのエラー:P – rray

答えて

3

コードで、Productのインスタンスを作成する場合、パラメータを渡すことは必須です。一方、デフォルト値はすでにあります。だから、それを安全に:

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

あなたのコンストラクトはあなたの変数のNULL値を許可しない、など

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