質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1361閲覧

クラスの定義でNotice: Undefined variable: ingredients ...という表示が出る。

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/04/30 13:24

O'REILLYのはじめてのPHPで勉強しています。
6-1.phpでクラスの定義をしています。
6-2.phpではオブジェクトの生成と使用となっています。

6-1.phpの最後の行(line 10)return in_array($ingredient,$this->$ingredients);で
$ingredientsに黄色の波線がでていて、黄色のビックリマークの説明は
variable '$ingredients' is undifined なっています。
6-1.phpを単独で実行すると
[Thu Apr 30 22:16:48 2020] 127.0.0.1:60898 [200]: /O'REILLY/chap06/6-1.php
エラーは出ていないようです。

'$ingredients'が定義されていないということは分かるのですが、
具体的にどこをどのように直せばいいのでしょうか。

6-2.phpを単独で実行すると
「Fatal error: Uncaught Error: Class 'Entree' not found in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-2a.php:5 Stack trace: #0 {main}thrown in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-2a.php on line 5」となります。
そこで 6-2.phpに「require '6-1.php';」追加して実行しました
エラーが6-1.php on line 10 でいっぱい出てきてお手上げです。

丸投げみたいで申し訳ないですがよろしくおねがいいたします。

期待する実行結果は以下です。
Soup contains chicken.
Sandwich contains chicken.
Sandwich contains bread.
Soup contains water.

エラーメッセージは以下のようになっています。

Notice: Undefined variable: ingredients in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Notice: Undefined property: Entree::$ in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Warning: in_array() expects parameter 2 to be array, null given in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Notice: Undefined variable: ingredients in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Notice: Undefined property: Entree::$ in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Warning: in_array() expects parameter 2 to be array, null given in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Notice: Undefined variable: ingredients in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Notice: Undefined property: Entree::$ in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Warning: in_array() expects parameter 2 to be array, null given in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Notice: Undefined variable: ingredients in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Notice: Undefined property: Entree::$ in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Warning: in_array() expects parameter 2 to be array, null given in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Notice: Undefined variable: ingredients in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Notice: Undefined property: Entree::$ in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Warning: in_array() expects parameter 2 to be array, null given in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Notice: Undefined variable: ingredients in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Notice: Undefined property: Entree::$ in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Warning: in_array() expects parameter 2 to be array, null given in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Notice: Undefined variable: ingredients in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Notice: Undefined property: Entree::$ in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Warning: in_array() expects parameter 2 to be array, null given in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Notice: Undefined variable: ingredients in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Notice: Undefined property: Entree::$ in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10 Warning: in_array() expects parameter 2 to be array, null given in C:\pleiades\xampp\htdocs.metadata.plugins\org.eclipse.wst.server.core\tmp0\htdocs\O'REILLY\chap06\6-1.php on line 10

該当のソースコード

php

1//6-1.php 2<?php 3class Entree{ 4 5 public $name; 6 7 public $ingredients = array(); 8 9 public function hasIngredient($ingredient) { 10 11 return in_array($ingredient,$this->$ingredients); 12 13 } 14} 15 16?>

php

1//6-2.php 2<?php 3 4// インスタンスを生成して$soupに割り当てる 5 6$soup = new Entree; 7 8$soup->name = 'Chicken Soup'; 9 10 11$soup->ingredients = array('chicken','water'); 12 13$sandwich = new Entree; 14 15// $sandwichのプロパティを設定する 16$sandwich->name = 'Chicken Sandwich'; 17 18 19$sandwich->ingredients = array('chicken','bread'); 20 21foreach(['chicken','lemon','bread','water'] as $ing){ 22 23 if($soup->hasIngredient($ing)) { 24 25 print "Soup contains $ing. <br>"; 26 27 } 28 29 if($sandwich->hasIngredient($ing)) { 30 31 print "Sandwich contains $ing. <br>"; 32 33 } 34 35} 36 37?>

試したこと

6-1.phpのpublic $ingredients = array();を
public $ingredients = ['chicken','lemon','bread','water'];にして実行してみました

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。```ここに言語を入力
コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

php

1<?php 2class Entree{ 3 4 public $name; 5 6 public $ingredients = array(); 7 8 public function hasIngredient($ingredient) { 9 10 // return in_array($ingredient,$this->$ingredients); 11 return in_array($ingredient,$this->ingredients); 12 13 } 14}

投稿2020/04/30 13:27

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/30 13:31

ありがとうございます
guest

0

ベストアンサー

$this->$ingredients

$this->ingredients

PHP マニュアル 言語リファレンス クラスとオブジェクト プロパティ
も参考にしてみてください。

投稿2020/04/30 13:26

編集2020/04/30 13:28
tanat

総合スコア18713

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/30 13:43

ありがとうございました。 参考書にはrequire '6-1.php';が書いてないので苦戦していて、Entreeがないと実行できないなあというところまで、たどり着きました。よく見たら打ち間違いしていたのですね。頑張ります。」最初この辺でつまづいて、7章までよくわからないままで進んだところで、挫折しました。「よくわかるPHPの教科書(よくわからない)」を復習して、再挑戦しています。
tanat

2020/04/30 13:58

ソースコードについては、PDF版を購入してエディタ上で比較出来るようにすると、学習が進みやすいかもしれませんね。 丁寧に一つづつ説明されている書籍ですが、理解せずにとりあえず先に進むというのはあんまり向いてないという印象です。
退会済みユーザー

退会済みユーザー

2020/04/30 14:28

ありがとうございます。2回目になると間違いや、分からなかったところも分かるようになっていることが、多々あります。私は初心者ですがこの参考書は 勉強になります。完全な実行コードで書かれていないので,かえっていいのかもしれません。英語とか、関数とか、ひかっかったメソッドなどを調べながら勉強しています。5月6日を目途にしています。エラーコードも少しづつ読めるようになってきました。ありがとうございます。
tanat

2020/04/30 14:32

勉強になるのは確実な良書だと思いますので、 引っかかったらPHPマニュアル(公式リファレンス) https://www.php.net/ で調べながら進めていくことをお勧めします。 *PHPマニュアルで調べられるようになったら基礎的な問題はほとんど解決します。 頑張ってください。
退会済みユーザー

退会済みユーザー

2020/04/30 15:06

ありがとうございます。少しずつ読んでいます。オプションのところがいまいちわかりません。出てくる関数の引数を比べながら、調べています。
退会済みユーザー

退会済みユーザー

2020/04/30 15:09

ありがとうございます。少しずつ、PHPマニュアルで調べています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問