前提・実現したいこと
「Goods.php」にprivateで連想多次元配列として格納している商品に**「Admin.php」**から新たな商品を追加出来るようなシステムを作りたいと思っています。
現在、classと標準入力を用いた自動販売機アプリの作成をしています。
「VendingMachineController.php」「Goods.php」「Admin.php」「Money.php」
の4つのファイルを作成し、**「Admin.php」から商品名の変更や在庫の変更といったことのできる管理者画面の作成を行っています。
その際に、「Goods.php」に連想多次元配列として格納している商品の後ろに「Admin.php」**から新たな商品の要素を追加したいと考えています。
「VendingMachineController.php」に$modelGoodsとしてインスタンスを作成しています。
現在、発生している問題
「Admin.php」から連想多次元配列への追加を行う際に、エラーが出てしまい、うまくシステムが作動しません。
該当のソースコード
PHP
1Goods.php 2 3class Goods{ 4 private $goods = [ 5 ['name' => '緑茶', 'cost' => 100, 'stock' => 5], 6 ['name' => 'ウーロン茶', 'cost' => 120, 'stock' => 5], 7 ['name' => 'コーラ', 'cost' => 150, 'stock' => 5], 8 ['name' => 'サイダー', 'cost' => 150, 'stock' => 5], 9 ['name' => 'ジンジャーエール', 'cost' => 170, 'stock' => 5], 10 ]; 11 12 public function setCreateGoods($name){ 13 $this -> goods['name'] = $name; 14 } 15}
PHP
1Admin.php 2 3 public function addGoods($modelGoods){ 4 echo "追加する商品名を入力してください\n"; 5 $output6 = trim(fgets(STDIN)); 6 $modelGoods -> setCreateGoods($output6); 7 }
試したこと
①配列への追加を試しました。
PHP
1Goods.php 2public function setCreateGoods($name,$cost,$stock){ 3 $this -> goods['name'] = $name; 4 $this -> goods['cost'] = $cost; 5 $this -> goods['stack'] = $stock; 6 }
PHP
1Admin.php 2public function addGoods($modelGoods){ 3 echo "追加する商品名を入力してください\n"; 4 $output6 = trim(fgets(STDIN)); 5 echo "追加する商品の価格を入力してください\n"; 6 $output7 = trim(fgets(STDIN)); 7 echo "追加する商品の在庫を入力してください\n"; 8 $output8 = trim(fgets(STDIN)); 9 $modelGoods -> setCreateGoods($output6,$output7,$output8); 10 }
PHP Fatal error: Uncaught TypeError: Unsupported operand types: string + int
が表示されました。
②
PHP
1Goods.php 2 3public function setCreateGoods($name,$cost,$stock){ 4 $this -> goods[] = ['name' => $name, 'cost' => $cost, 'stock' => $stock]; 5 }
エラー表示出て作動しませんでした。
③
PHP
1Goods.php 2 3public function setCreateGoods($name,$cost,$stock){ 4 array_push($this -> goods,'name' => $name,'cost' => $cost,'stock' => $stock); 5 }
同じくエラー表示が出て作動しませんでした。
他にも、配置を変えたり調べたのですがどうしても解決することが出来ませんでした。
説明が分かりづらく申し訳ございません。
よろしければ、ご教授よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー