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

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

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

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

Q&A

解決済

4回答

1730閲覧

PHP クラスで使用する関数の引数ついて

hiro0208

総合スコア75

PHP

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

0グッド

0クリップ

投稿2017/05/06 04:20

編集2017/05/06 04:23

今、関数やクラスを学習中で、
クラス作成で関数のために使用している
引数について質問です。

EvenOdd.php

1<?php 2//クラス作成 3class EvenOdd{ 4 public function JudgeEvenOdd($num) { 5 if ($num % 2) { 6 return '奇数です'; 7 } 8 else { 9 return '偶数です'; 10 } 11 } 12} 13?> 14

index.php

1<?php 2require_once('EvenOdd.php'); 3$res = ''; 4if (isset($_POST['submit'])) { 5 $evenOdd = new EvenOdd(); 6 $res = $evenOdd->JudgeEvenOdd($_POST['num']); 7} 8?> 9<!doctype html> 10<html> 11<head> 12<meta charset="UTF-8"> 13<title>sample</title> 14</head> 15<body> 16<h1>Classの確認</h1> 17<form action="" method="post"> 18<input type="text" name="num" required> 19<input type="submit" name="submit" value="判定"> 20</form> 21<?php 22echo $res; 23//echo $num; 24//var_dump($num); 25?> 26</body> 27</html>

このEvenOdd.phpファイルの
関数の引数と条件式の判別式で利用している

$num

ですが、変数の定義や格納などせずに利用していますが、
なんのためにあるんでしょうか?

echo $num エラー
var_dump($num) エラー NULL
となり値が確認できなく、どうやってif文の判別をしているもわからないです。
ご教授いただけないでしょうか?よろしくお願いします。

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

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

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

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

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

guest

回答4

0

関数の引数は、関数の中でのみ利用できます。呼び出すときのカッコに入れたものが、関数内で引数に割り当てられます。

投稿2017/05/06 04:25

maisumakun

総合スコア145123

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

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

hiro0208

2017/05/06 04:52

ありがとうございます。 また質問なんですが、 なぜ入力された値が、クラスの関数の引数で使用できるのでしょうか? クラス作成で使用している JudgeEvenOdd($num) インスタンス変数から呼び出しいる JudgeEvenOdd($_POST['num']) 関数名は同じですが、引数がそれぞれ違います。 データの流れは、入力された$_POST['num']の値を JudgeEvenOdd($num)の引数として利用していると思うですが。 【処理の順序】は 1,インスタンスを使いクラスにあるメソッド(関数JudgeEvenOdd)が動く 2,クラスの関数JudgeEvenOdd($num)を処理する 3,戻り値を$resに返す。 4,$resを出力して処理結果が出る。 だと思っているのですが、、、
guest

0

Classにしないで書くとこうなります。これと同じことをClassとして別定義しているという事です。
judgeEvenOdd を別クラスにすることで、再利用しやすいという利点があります。
もし、このコードも理解不明であればClassの勉強はまだ早く、functionを理解してからがお勧めです。

php

1<?php 2function judgeEvenOdd($num) { 3 if ($num % 2) { 4 return '奇数です'; 5 } 6 else { 7 return '偶数です'; 8 } 9} 10 11$res = ''; 12if (isset($_POST['submit'])) { 13 $res = judgeEvenOdd($_POST['num']); 14} 15?> 16<!doctype html> 17<html> 18<head> 19<meta charset="UTF-8"> 20<title>sample</title> 21</head> 22<body> 23<h1>functionの確認</h1> 24<form action="" method="post"> 25<input type="text" name="num" required> 26<input type="submit" name="submit" value="判定"> 27</form> 28<?php 29echo $res; 30//echo $num; 31//var_dump($num); 32?> 33</body> 34</html>

投稿2017/05/06 04:36

rik

総合スコア1151

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

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

hiro0208

2017/05/06 04:59

<functionを理解してからがお勧めです。 ありがとうございます。 functionについて調べてみます。
guest

0

ベストアンサー

変数の定義や格納などせずに利用していますが

メンバ関数 JudgeEvenOdd に引数として渡した時点で、$num は JudgeEvenOdd() のローカル変数として定義および値が格納されています

なんのためにあるんでしょうか?

...?

"条件式の判別式で利用している" のではないですか?

echo $num エラー

$num はメンバ関数 JudgeEvenOdd の中でだけ使えるローカル変数です。そのため外からは $num を参照することはできません。この仕組み・概念を「スコープ」と呼びます。クラスの学習を進めれば出てくると思います。

投稿2017/05/06 04:33

編集2017/05/06 04:50
miyahan

総合スコア3095

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

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

hiro0208

2017/05/06 05:01

<メンバ関数、ローカル変数、スコープ これらについてわかっていないです。 クラスの記述の仕方など進めて、それらについても合わせて学習して行こうと思います。 ありがとうございます。
guest

0

下のほうの```$res = $evenOdd->JudgeEvenOdd($_POST['num']);

``JudgeEvenOdd($_POST['num']);``は上のほうで```public function JudgeEvenOdd($num)` ``としてますので、``public function JudgeEvenOdd($num=$_POST['num'])`` のような感じになります。 そのまま計算が行われていき``return``されたときに``$num``は関数の中でしか生きれないので役目を終えて死滅します。 なので``echo``をした``$num``と`public function JudgeEvenOdd($num)`の中の``$num``は同名ですが別人です。外に``$num``はいないので``null``です。

投稿2017/05/06 05:01

toutou

総合スコア2050

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

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

hiro0208

2017/05/06 05:05

関数の返り値=別人 になっているため、出力がNULLになっているのですね。 何か推理しているような説明で面白いです。 ありがとうございます。 >上のほうで`public function JudgeEvenOdd($num)` としてます は、 require_once('EvenOdd.php'); のことでしょうか?
toutou

2017/05/06 05:09

上の枠のクラス作成のほう
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問