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

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

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

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

Q&A

解決済

1回答

393閲覧

PHPでインスタンスのプロパティをランダムに表示したいが表示できません。

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2020/08/09 09:47

前提・実現したいこと

PHPで、ボタンを押すと、別ページに飛び①メニューのnameプロパティ②そのメニューのpriceプロパティを”ランダムに”表示するようなプログラムを作成したいと思っています。
*progateにてHTML&CSS、PHPを1周した程度の初心者です。PHPの復習として、自身で考案した同プログラムを作成中です。

発生している問題・エラーメッセージ

問題は飛んだ先のページで起こっています。
下記コードの<body><p>タグの中に①メニューのnameプロパティをランダムで表示させたいところです。
1つ目〜4つ目のechoは表示されるのですが、肝心の5つ目のechoが表示されません。
*1つ目〜4つ目のechoは5つ目のechoが表示されない原因を探るために作成したコードです。
現状ページに表示されるのは以下の通りです(ランダムにしているため、ページ表示する度に表示は変わりますが。)
5つ目のechoでRICEもしくはWATERをランダムで表示させたいところです。
なお、今後インスタンスやプロパティを追加していくことも想定しているため、Menuクラスを使って作成したいです。

Menu 1$water$waterRICE

該当のソースコード

PHP

1<?php 2class Menu{ 3 protected $name; 4 protected $price; 5 protected static $count = 0; 6 7 public function __construct($name,$price){ 8 $this->name = $name; 9 $this->price = $price; 10 self::$count++; 11 } 12 13 public function getName(){ 14 return $this->name ; 15 } 16 public function getPrice(){ 17 return $this->price ; 18 } 19 public static function getCount(){ 20 return self::$count ; 21 } 22} 23 24$rice = new Menu('RICE',200); 25$water = new Menu('WATER',100); 26 27$menus = array('$rice','$water'); 28 29$random = rand(0,Menu::getCount()-1); 30$menucategory = $menus[$random]; 31 32?> 33<!DOCTYPE html> 34<html> 35 <meta charset="utf-8"> 36 <head> 37 <title>Menu</title> 38 </head> 39 <body> 40 <header>Menu</header> 41 <br> 42 <p> 43 <?php 44 echo $random; 45 echo $menus[$random]; 46 echo $menucategory; 47 echo $rice->getName(); 48 echo $menucategory->getName(); 49 ?> 50 </p> 51 </body> 52</html>

試したこと

どこが問題か探るため、上記にも記述したように1つ目から4つ目のechoを作成しましたが、いずれも問題なく表示されます。

ゲッターやセッターなどまだ十分に理解できていないため、nameプロパティをpublicにしてゲッターを使わずに表示することも試してみましたが、同様の結果でした。

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

atomで.phpファイル作成し、MAMPを使ってローカル環境で表示させています。

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

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

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

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

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

takasima20

2020/08/09 11:14

$menus = array('$rice','$water');
guest

回答1

0

ベストアンサー

原因

出力結果が

1$water$waterRICE

となるという事は$waterが変数では無く$waterという文字列として認識されていることです。

具体的には

PHP

1$menus = array('$rice','$water');

で変数をシングルクォートで囲ってしまっているため、変数の中身が展開されずに$rice,$waterというそれぞれ文字列として認識されています。
php シングルクォーテーション ダブルクォーテーションあたりで調べてみてください。

また、デバッグ方法としてはそれぞれの変数がどの場所でどの様な値になっているかを確認するのが基本です。

例えばあ

PHP

1$menus = array('$rice','$water'); 2var_dump($menus); 3die();

などして中身を確認してみると、そもそも$menusに展開した値が入っていないことが分かるでしょう
php xdebug ブレークポイント等で調べてデバッグ環境を整えることをお勧めします)

回答

これを

PHP

1$menus = array($rice,$water);

とすれば想定した動きになりそうです。
ならなければ、各箇所で変数にどのような値が実際に格納されているかを一つづつvar_dump()なりブレークポイントなりで確認していってデバッグしてみてください。

投稿2020/08/09 14:58

編集2020/08/09 15:01
tanat

総合スコア18713

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

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

退会済みユーザー

退会済みユーザー

2020/08/09 23:48

array内の変数のハッシュタグを外すと狙い通りの表示が得られました! また、デバッグについてもご教示いただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問