8 第 7 章関数 図・ -11 入れ子 ( ネスト ) になった関数の呼び出し 03 0 t ・ WI 0W3 emet Exp orer ぃ 0 、、ロ http://tocathost/test.php , ・ , 0 ⅳ・ " ct , ーを物 - 住ペーラマ 。 alo 関数の戻り値は 30 てす 引数 y の値は 20 てす 引数 x の値は 10 てす add 関数の呼び出し 。 alo 関数の呼び出し ローカルイントラネットー保護モード : 有効 気 100 % この例は関数から関数の呼び出しを行い、またその呼び出しされた関数が関 数の戻り値を使う・・・・・・というすこし凝ったプログラムになっていますが、関数を 呼び出してもかならす呼び出した部分に戻ってくるという点を覚えておきま しよう。 実際にプログラミングをしていくと「関数を呼び出したらその関数が別の関 数を呼び出して、その関数がまた別の関数を・・・・・・」という場面に何度も遭遇しま す。こうした再帰的関数の呼び出しに慣れておきましよう。 次に戻り値の return を省略する例と、 return が複数回登場する例を見てみま しよう。 <?php function echO echO eChO function disp($a) { I<P > 引数 a の値は ーですく / p > isOdd ( $value) { if ($value % 2 retUrn $VaIUe retUrn $Va11-ie ーは偶数 ーは奇数 disp(5); echo I<P > d 土 sp の呼び出しく / p echo '< > 土 sOdd の呼び出し ( 1 ) </P> echo '<P > 戻り値はし echo '<P > 土 sOdd の呼び出し ( 2 ) く / P ech0 1<P > 戻り値はし isOdd(7) isOdd(4)
7 92 第 7 章関数 出して使うことができます。これによりコードをすこし短くできます。 本節では、関数の利用から関数の作成までを説明します。 関数のび出し 引数無しで関数を呼び出す まずは関数の呼び出し方を説明します。 PHP にはインストールされた直後の 状態でも、すでにたくさんの関数が用意されています。まずはそれらを使ってみ ましよう。関数の呼び出しは、以下のように記述します。 関数名 ( 引数 関数の呼び出しには括弧が必要です。引数が必要ない場合は括弧の中には何 も入りませんが、括弧自体は省略できません。次の例では、引数無しで mt て and 関数を呼び出し、結果を echo を使って表示させています。 <?php echo mt rand ( ) mt ー rand 関数はランダムな値を生成する関数です。この関数を実行すると、 そのたびに違った値が作成されます。今回の例の実行結果は次のようになります。 図・ -6 mt_rand 関数の利用 http: 冫 08 旧 05 と . p in OWS 科 h : / / ⅸ ~ 加引 t t ・ P 1044999442 兮Äしⅳ eSea 「ー ローカルイントラネットー保護モード : 有効 ロ ~ 気 100 % ャ
7-2 関数 プラウザをリロードしてみると、値が変化します。ランダムな数字が表示され ていることが確認できれば、正しく mt ー rand 関数を呼び出せていることが分か ります。 引数を指定して関数を呼び出す 関数を呼び出す際に、引数を指定することができます。引数とは「関数内の処 理で利用する値」のことで、呼び出し時に指定します。先の mt-rand 関数は引 数を 2 っ取る関数でもあるため、引数を指定して実行してみましよう。 く ?php echO mt rand ( 1 ′ 10 ) この実行結果は次のようになりました。 図② -7 mt_rand に引数を与える h せ p : / 月 08 旧 0 est.php ー W dO れ t 守 t Exp 0 「ぎ、、 ロ h は p : / ハ s い e 軋 p ャ↓ナ Live 第、一をペジ凹マ 7 ローカルイントラネットー保護モード : 有効 気 100 % マ mt ー rand 関数の引数は、第 1 引数が「生成される数値の最小値」、第 2 引数が「生 成される数値の最大値」となっています。つまり、上記の mt ー rand 関数呼び出し の意味は「最小値 1 という引数と最大値 10 という引数を与えて mt ゴ and 関数を 実行する」となります。 引数に指定できる値と数は、関数によって異なります。たとえば、 str-repeat 関数は引数に文字列と数値を受け取る関数ですが、 c 。 unt 関数は引数に配列を 1 つだけ受け取る関数になっています。 ノヾ <?php echo ー he110 3 / / st て一て epeat 関数の呼び出し str repeat ()a ′
7 ー 2 関数 図② -10 戻り値の利用例 http: 08 ー st t np れぎ n 戦 図 h : / / ⅸ価 t ・ P す ☆ = ロ h : / / t / t myFuno の呼ひ出し 引数 a の値は 5 てす myFun 。の戻り値は 100 です 0 「 e 一 ス Live Search 、第朝一をペジ働マ 鱆ローカルイントラネットー保嚢モード : 有効 気 18 % どうでしようか。作成した関数 myFunc が呼び出せて戻り値も取得できてい ることが確認できます。また、引数が複数ある場合の例と引数が無い場合の例 が以下になります。 <?php function add($x, (Y) { echo '<P > 引数 x の値はし $x, echo p > 引数 Y の値はし $Y' return $x + $y; function calc ( ) { ーですく / p ーですく / ・ echo p > add 関数の呼び出しく / P return add(10, 20 echo '<P > calc 関数の呼び出しく / p > echo '<P > calc 関数の戻り値はし $ret' ーですく / P>' calc() $ret この例は関数の中で関数を呼び出す例です。引数を 2 つ必要とする add 関数 と引数が無い関数 calc を作成しました。 add 関数では第 1 引数に設定された 変数 x の値と第 2 引数に設定された変数 y の値を加算して戻します。 calc 関 数は、「 10 」と「 20 」の値を引数として add 関数を呼び出し、その結果を戻り値と して戻します。 コードで呼び出している関数は calc だけです。 calc 関数が内部で add 関 数を呼び出し、「 10 」と「 20 」を足して戻します。ふたたび calc 関数に戻ってき た際には、 calc 関数は add 関数の戻り値を戻り値として返しています。
第 7 章 注・一 4 ・ユーザー定義関数 KEYWORD 関数 ちなみに、関数は宣言した時点で は関数の実行は行われません。 関数の呼び出しが行なわれた時 点でコードが実行されます。その ため、関数が呼び出された際に初 めてエラーが分かるということも あります。 注・ -5 複数のデータを戻したいという場 合は、変数ではなくて配列を返す という方法があります。 関数の作成 関数の呼び出しと戻り値の動きは把握できたでしようか。呼び出しと戻り値 の扱いが分かっていればあらかじめ用意された関数を利用することができま す。では次に、ユーザー独自の関数 ( ユーザー定義関数 ) を作成してみましよう。 関数を作成するには func ⅱ。 n 文を利用します。 re turn function 数名 ( 引数 戻り値 引数の部分は必要ないのであれば省略することができます。もし複数の引数 を必要とする場合は匚 ( カンマ ) 」を用いて複数の引数を指定します。引数の部 分には変数名を指定し、指定された変数を内部で使用します。 戻ク値に関しても同じく必要なければ省略することができますが、複数の戻 り値を返すことはできません。また、関数名はすでに存在する関数名を指定する ことができません ( 注・ -4 ) 。 具体的な例を見てみましよう。関数 myFunc を作ります。 myFunc は引数をと り、引数の値を表示させて、戻り値を戻します。 <?php function myFunc ( (a) { echo p > 引数 a の値は嵭 ech0 $a; echo ーですく / P>I て eturn 10g echo '<p>myFunc の呼び出しく /07 $returnVa1ue = myFunc ( 5 echo I<p>myFunc の戻り値は一 echO $returnVa1ue; echo ーですく / p 関数の定義の最後でて e u て n 10g を実行して値を戻しています。この関 数の場合はどんな引数でも戻り値は「 1 開」です。 return は関数の戻り値を戻す ために使いますが、 1 つの関数の定義の中で 1 度しか使えません ( 注・ -5 ) 。 今回の例の出力結果は次のようになります。
・ 68 PHP の基本と変数 第 3 章 く h1 > く / hl > く h2 > く / h2 > ード く ?php echo ー he110 ー ? > く ?php echo 'worldl ? > C 言語や Java 言語などのほかのプログラミング言語とは違い、 p Ⅱ p のコード にはプログラムの実行開始位置示す main 関数に相当する部分は必要ありませ ん。 PHP では、「 <?php 」と「 ? > 」いうコードの中に記述されたプログラムが、先 頭から順に実行されるようになっています。また、 PHP のプログラムは、ファイ ル内に書かれたすべての PHP コードが無くなるまで実行されます。ただし、プ ログラム内で exlt もしくは dle という命令が実行された場合、そこで PHP の実 行が終了します。 KEYWORD ・ main 関数 ・ die ・ exit ・コンソール プログラムの実行方法 PHP コードを実際に実行するには、コマンドプロンプトなどのコンソールを 通して実行する方法と、 Web プラウザを通して Apache 経由で実行する 2 種類 の方法があります。 図 3-2 ブラウザからの呼び出しとコンソールからの呼び出し プラウザから PHP を呼び出す場合 <?php PHP コード 合 場 す 出 び 呼 を ら か コ コンソールなどから PHP のプログラムを直接実行する場合には、 PHP のイン タブリタが対象のファイルを読み込んで、記述されている PHP コードを実行し
・ 206 第 7 章関数 として使っています。このように可変関数は変数に設定された文字列から関数 を呼び出します。実行結果は次のようになります。 図・ -18 可変関数 http: /localhost/test.php - WindowS nternet ゆに「 ロ ht ゆ : 川 host / t こ p , ス Live 第 D 亠“阯べージチ これは fun 。 A てす 引数ⅵ ue の値は he Ⅱ。てす これは fun 。 B てす 引数 vl の値は h 。 ge てす 引数 v2 の値は fi 。。てす ローカルイントラネットー保護モード : 有効 可変関数を利用すると、同じコードからでも、変数に与える文字列によってさ まざまな機能が利用できるようになります。ただし、変数に設定されている値が 何であろうとも関数の呼び出しを行ってしまうため、可変関数を使用する際は 注意が必要です。定義されていない関数を呼び出そうとするとエラーになりま す ( 注・ -7 ) 。 気 1009 もャ 注②ー 7 ある関数が存在するかどうかは function—exists 関数を利用して 調べることができます。引数に関 数名を指定して実行すると、関数 がある場合は true 、無い場合は 囿 se が返ります。
この章のテーマ 本章では PHP の基本的な文法の解説の仕上げとして関数の利用方法について説 明します。関数は PHP の一連の処理に名前を付けたもので、簡単に呼び出して利 用することができます。すでに解説してきたなかでもいくつかの関数が利用され ており、 PHP の多くの機能が関数で書かれています。ここでは関数の基本知識と 利用するための方法を解説するほか、独自の関数を定義して利用する方法につい ても説明します。また、関数に関連して外部のファイルの読み込み、関数で使われ る変数の有効範囲 ( スコープ ) 、言語構造などについても解説します。本章をマス ターして PHP の基本を押さえてしまいましよう。 7-1 外部ファイルの読み込み include 文と require 文 7-2 関数 関数の基礎知識 関数の作成 可変引数と可変関数 7-3 変数のスコープ 関数内外でのスコープの違い 0 $GLOBALS 変数 7-4 日語構造について 言語構造とは何か list() について 0 include_once 文と require_once 文 echO と print の違い 静的 (static) 変数 ローカルスコープとグローバルスコープ 参照渡し 関数の呼び出し この章を学習すると以下の知識をマスターできます。 ・外部のプログラムファイルの読み込み方 ー連の処理をまとめて呼び出すことのできる関数の使い方 ・関数の作り方 ・参照渡し、可変引数、可変関数の利用法 ・スコープの役割とグローバル変数の利用 ・ PHP に備わる言語構造とその利用方法
7-3 変数のスコープ function myFunc ( ) { static static キーワードで宣言した変数は、その変数内でずっと保持されます。以下 の例を見てください。 く ?php function countUp ( ) { echo '<P > 現在の値はし $counter, れセて十十一 static $CO Ⅱれし e て = 0 : countUp(); countUp ( countUp (); ーですく / p > static で宣言された式は関数が初めて実行されたときのみ実行され、その変 数は関数の呼び出しが終っても保持され続けます。上記例の実行結果は次のよ ロマス Li 朝 http://localhost/test.php 」朝も新を n 弍 p10 「髢 図・ -22 static 変数の利用 うになります。 ☆一朝 h 。 / / ⅸ計 / t …二を分 , を物 , ページ旧 , 現在の値は 2 てす 現在の値は 1 てす 現在の値は 0 てす ローカルイントラネットー保護モード : 有効 気 1009 もマ 関数 countUp で、関数内に保持している変数 counter の値が、 countUp 関数 が呼び出された際にどんどん増えているのが分かるかと思います。 「 static 」で作成した変数は、関数実行後も関数内に残るため、関数内で作成し た変数を再利用したい際に便利です。
・ 20 第 1 章プログラミングの基礎知識と Web アプリケーション 図① -15 Web アプリケーションの基本的な動作は共通 リクエストから処理する アプリケーションの呼び出し ープログラム ープログラム リクエスト レスポンス アプリケーションの処理結果を レスポンスとして返却 ープログラム アプリケーションは 各プログラムを実行 Web プラウザからのリクエストを受け取ったサーバーアプリケーションがそ のリクエスト情報を元にサーバーサイドアプリケーションを呼び出し、そのデー タを元にサーバーサイドアプリケーションが処理を行い、結果を HTML や画像 データとしてプラウザに返却します。この「リクエスト」と「レスポンス」の繰り 返しで Web アプリケーションが動作するわけです。 ローカルアプリケーションとは異なり、サーバーサイドアプリケーションの入 力はリクエストであり、処理結果はレスポンスとなります。したがって、ローカ ルアプリケーションをそのままサーバーサイドアプリケーションとして実行する ことは基本的にできません。また、サーバーサイドアプリケーションには、サー バーサイド処理に最適化されたプログラムの記述が必要になってきます。多く のクライアントから送信されるリクエストはテキストデータがほとんどであるた め、テキスト処理に特化したサーバーサイドアプリケーションを用意することに なります。 こうした事情からサーバーサイドアプリケーションに特化したプログラミン グ言語が多く存在します。本書でも紹介する PHP もサーバサイド処理に特化し たプログラミング言語のひとつです。 KEYWORD ・ PHP