🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

1回答

918閲覧

PHPのコードについての不明点

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2019/12/12 11:21

PHPの初学者です。
下のようなコードをprogateで書き問題なく動いたのですが、コードを見てみて疑問に思ったことがあります。

menu.phpではorderCountプロパティを設定したのですが、
confirm.phpでorderCountを使うときにプロパティとしてではなく、変数として扱っています。
これはmenu.phpでsetOrderCountメソッドでorderCountを変数として扱っているからでしょうか?
そもそもorderCountはprivateで作ったプロパティですのでクラス外で呼び出すことはできないと思うのですが。
どなたかお教えください。

index.php

html

1<?php require_once('data.php') ?> 2 3<!DOCTYPE html> 4<html> 5<head> 6 <meta charset="utf-8"> 7 <title>Café Progate</title> 8 <link rel="stylesheet" type="text/css" href="stylesheet.css"> 9 <link href='https://fonts.googleapis.com/css?family=Pacifico|Lato' rel='stylesheet' type='text/css'> 10</head> 11<body> 12 <div class="menu-wrapper container"> 13 <h1 class="logo">Café Progate</h1> 14 <form method="post" action="confirm.php"> 15 <div class="menu-items"> 16 <?php foreach ($menus as $menu): ?> 17 <div class="menu-item"> 18 <img src="<?php echo $menu->getImage() ?>" class="menu-item-image"> 19 <h3 class="menu-item-name"><?php echo $menu->getName() ?></h3> 20 <p class="price">¥<?php echo $menu->getTaxIncludedPrice() ?>(税込)</p> 21 <input type="text" value="0" name="<?php echo $menu->getName() ?>"> 22 <span></span> 23 </div> 24 <?php endforeach ?> 25 </div> 26 <input type="submit" value="注文する"> 27 </form> 28 </div> 29</body> 30</html>

menu.php

html

1<?php 2class Menu { 3 private $name; 4 private $price; 5 private $image; 6 private $orderCount=0; 7 8 public function __construct($name, $price, $image) { 9 $this->name = $name; 10 $this->price = $price; 11 $this->image = $image; 12 } 13 14 public function hello() { 15 echo '私は'.$this->name.'です'; 16 } 17 18 public function getName() { 19 return $this->name; 20 } 21 22 public function getImage() { 23 return $this->image; 24 } 25 26 public function getOrderCount() { 27 return $this->orderCount; 28 } 29 30 public function setOrderCount($orderCount) { 31 $this->orderCount = $orderCount; 32 } 33 34 public function getTaxIncludedPrice() { 35 return floor($this->price * 1.08); 36 } 37 38} 39?> 40 41

data.php

html

1<?php 2require_once('menu.php'); 3 4$juice = new Menu('JUICE', 600, 'https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/php/juice.png'); 5$coffee = new Menu('COFFEE', 500, 'https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/php/coffee.png'); 6$curry = new Menu('CURRY', 900, 'https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/php/curry.png'); 7$pasta = new Menu('PASTA', 1200, 'https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/php/pasta.png'); 8 9$menus = array($juice, $coffee, $curry, $pasta); 10 11?>

confirm.php

html

1<!-- ここでdata.phpを読み込んでください --> 2<?php require_once ('data.php') ?> 3 4<!DOCTYPE html> 5<html> 6<head> 7 <meta charset="utf-8"> 8 <title>Progate</title> 9 <link rel="stylesheet" type="text/css" href="stylesheet.css"> 10 <link href='https://fonts.googleapis.com/css?family=Pacifico|Lato' rel='stylesheet' type='text/css'> 11</head> 12<body> 13 <div class="order-wrapper"> 14 <h2>注文内容確認</h2> 15 <?php foreach ($menus as $menu): ?> 16 <!-- 変数$orderCountに$_POSTで受け取った値を代入してください --> 17 <?php $orderCount=$_POST[$menu->getName()] ?> 18 <?php ?> 19 <p class="order-amount"> 20 <!-- ここに、$menuのゲッターを用いてnameプロパティを表示してください --> 21 <?php echo $menu->getName() ?> 22 x 23 <!-- ここに、$orderCountを表示してください --> 24 <?php echo $orderCount ?> 2526 </p> 27 <?php endforeach ?> 28 </div> 29</body> 30</html>

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

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

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

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

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

m.ts10806

2019/12/12 21:24

プロゲートのほぼ同じ課題と思われる質問がまあまあ出てますね。 https://teratail.com/search?q=orderCount+tag%3APHP 定期的に出ているということはそれだけ良くない題材と言う理解をします(少なくとも私の場合は) プロゲート利用したことはないですけど、デバッグとPHPマニュアルの確認を勧めてないのかなぁ。
guest

回答1

0

Menu.php で定義している「$orderCount」は、おっしゃる通りプロパティ(メンバ変数)ですが、Confirm.php内の「$orderCount」変数とは別物です。

投稿2019/12/12 11:58

XNXSXMXR

総合スコア239

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

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

退会済みユーザー

退会済みユーザー

2019/12/12 12:01

回答ありがとうございます。 別物であれば、名前を変えるなどしなければ同一名称だとエラーなどが起きてしまうと思うんですが、別に同じ名称でも大丈夫なんですか?
XNXSXMXR

2019/12/12 12:09 編集

混同するなら名前を変更してもよいかと思いますが、クラスのプロパティとそれ以外との違い(スコープ)が理解できれば、同じ名前でも問題ないと思います。 例え方が悪いかもしれませんが、同じ「太郎」という名前でも、「山田太郎」と「鈴木太郎」で違うのと同じく、属している場所によって異なります。 ・・・・すみません、やはりこの例はよくないですね。 「PHP 変数 スコープ」とかで検索すると、ベストな回答があると思いますので、ご確認ください。 ↓一例です。 https://qiita.com/TakashiOshikawa/items/0f2420a1c94ba78c9035 https://qiita.com/taka027/items/8beccec15fde098067df
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問