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

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

新規登録して質問してみよう
ただいま回答率
85.35%
標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

PHP

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Q&A

解決済

3回答

1525閲覧

php、functionの使い方

yudouhu

総合スコア16

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

PHP

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

0グッド

0クリップ

投稿2020/04/27 16:16

phpでfunctionを使い、簡単なif文を作成しているのですがデータが空だったら「数字を入力してください」とだして、それ以外だったらfunctionを呼び出すというプログラムなのですが、前の画面で受け取ったデータが定義されていないとエラーがでてしまいます。
またreturnで返した変数でもエラーが起こっており、そちらはまだ、returnを理解出来ていないのでエラーコードもわからない状態です。何卒ご回答のほどよろしくお願いいたします。

送る側のデータ <form method="post" action="gengo.php"> 西暦を入力してください<br/> <input type="text" name="seireki"><br/> <input type="submit" value="ok"> </form>
<?php $seireki=$_POST['seireki']; if($seireki==""){ echo '数字を入力してください'; exit(); } else{ function abc() { if(1868<=$seireki&&$seireki<=1911) { echo '明治'; } if(1912<=$seireki&&$seireki<=1925) { echo '大正'; } if(1926<=$seireki&&$seireki<=1988) { echo '昭和'; } if(1989<=$seireki&&$seireki<=2019) { echo '平成'; } } } abc(); ?>
$seireki=$_POST['seireki']; if($seireki==""){ echo '数字を入力してください'; exit(); } else{ $wareki=gengo($seireki); echo $wareki; function gengo($seireki) { if(1868<=$seireki&&$seireki<=1911) { $gengo='明治'; } if(1912<=$seireki&&$seireki<=1925) { $gengo='大正'; } if(1926<=$seireki&&$seireki<=1988) { $gengo='昭和'; } if(1989<=$seireki&&$seireki<=2019) { $gengo='平成'; } else { $gengo='令和'; } return ($gengo); } } ?>

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

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

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

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

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

yuicho

2020/04/27 16:54 編集

同じようなPHPコードが二つあります。 不要な方削除お願いします。 > 前の画面で受け取ったデータが定義されていないとエラーがでてしまいます。 > returnを理解出来ていないのでエラーコードもわからない状態です。 エラーの内容をそのまま貼ってもらうほうが良いと思います。
guest

回答3

0

ベストアンサー

関数もクラスも変数とかも本質的には同じなのですが、
**「定義しておいて、適宜使うもの」**なので、
そもそもロジックの中に書くのは間違っています。
関数の中にロジックを書き、使うものです。

そしてやはり「変数のスコープ」「引数」「返り値」など基本的なことが抜けてるように思います。
「関数」と言っても、PHPの標準関数も「関数」で概念としては同じです。
基本的にはINPUTがあってOUTPUTがある(どちらかだけ、どちらもないこともある)
「何か値を渡したら(←INPUT:引数)、所定の処理をして、結果を返す(←OUTPUT:戻り値)」
のが関数です。

例えば「10足して返す」ならこう。

php

1<?php 2function add10(int $a = 0):int 3{ 4 return ($a + 10); 5} 6 7$sum = add10(15); //これくらいなら一度受け取らなくてもいいけど 8echo $sum;

例えば「10足した値を出力する」ならこう。

php

1<?php 2function add10(int $a = 0) 3{ 4 echo ($a + 10); 5} 6 7add10(15);

みたいな感じ。
(引数・戻り値の型宣言などは別途調べてください。)

先に「変数のスコープ」のページを提示していますが、
関数の外で定義した変数は関数内で直接参照することはできません(「関数からは見えない」と表現したらいいかな)

前の画面で受け取ったデータが定義されていないとエラーが

こういうのはコピー&ペーストするのが原則ですが、おおよそ$seirekiだと思いますが、これは変数のスコープによるものです。

まずは関数の定義する場所から。
コードの見通しをよくするところから始めてください。

投稿2020/04/27 23:01

編集2020/04/28 01:39
m.ts10806

総合スコア80875

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

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

yudouhu

2020/05/01 10:37

なるほど、よくわかりました。 ありがとうございます。
guest

0

公式マニュアルで基礎をしっかり学習してみてはいかがでしょうか。
関数
返り値

投稿2020/04/27 17:40

javahack

総合スコア1088

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

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

0

前の画面で受け取ったデータが定義されていないとエラー

についてはどんなエラーかわからないので何とも言えないですが、gengo()はifの外で定義したほうがいいです。
そもそもifの中で定義すること自体が可読性の観点からよろしくないですし、普通PHPでは関数定義は呼び出しの前後どちらでもいいのですが、ifの中で定義してしまうと呼び出す前に定義されてないとエラーになるようです。

投稿2020/04/27 16:57

yuicho

総合スコア142

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問