構造化とオブジェクト指向 (2/7)
作成:2010-12-11 16:10
更新:2010-12-11 16:10
更新:2010-12-11 16:10
■関数化するメリットとは
では、先のサンプルを、関数で構造化(というほど大げさではありませんが……)してみましょう。下にソースコードを挙げておきます。今回は、更に置き換えられたところがわかるようにボールド&赤でPHPを表示させてみました。違いをよく見てみましょう。
ここでは、最初に「function getBoldStr($str)」というようにして関数を定義しています。引数には$strという仮引数を1つ用意しました。この$strのテキストを置換し、できあがったものをreturnで返しています。――呼び出す側を見てみると、
このように関数化することで、この処理はプログラムのどこからでも呼び出せるようになります。ここでは、送信されたテキストの表示のみならず、タイトルや説明のテキストなどもすべてこの関数で処理して出力させています。関数化することにより、同じ処理を何度も書く必要がなくなります。いつでも必要なときに呼び出せば必要な処理が実行されるのです。関数化の利点がよくわかりますね。
このスクリプトをよくみると、変数についてちょっと面白いことに気がつくでしょう。関数の仮引数でも、それ以外のところでも、$strという変数が使われています。同じ変数をこんなに使い回して、途中で値が書き換わっちゃったりする心配はないのかな?と思った人。実は、関数の中の$strと、外の$strは、別の変数なのです。
変数には、それが利用できる範囲というのが決められています。これは「スコープ」と呼ばれます。関数の中で変数を利用する場合、その変数は「関数の中だけでしか生きられない」ようになっています。その関数を抜けた時点で、その変数は消滅するのです。また再びその関数が呼び出されても、前に呼び出されたときの変数は綺麗サッパリなくなっており、またすべて新たに作られます。
このように、関数の内部で作られ、内部でのみ使われる変数を「ローカル変数」といいます。これに対し、関数の外側で作られ、スクリプト全体で利用可能になっている変数を「グローバル変数」といいます。関数を利用する場合、この「変数のスコープ」ということについてよく理解しておく必要があります。
ここでは、最初に「function getBoldStr($str)」というようにして関数を定義しています。引数には$strという仮引数を1つ用意しました。この$strのテキストを置換し、できあがったものをreturnで返しています。――呼び出す側を見てみると、
<?php echo getBoldStr($str); ?>こんな具合で書いています。getBoldStrの後に、必要な値を()で渡しています。ごく普通の、PHPに用意されている関数と使い方はまったく変わらないことがわかるでしょう。
このように関数化することで、この処理はプログラムのどこからでも呼び出せるようになります。ここでは、送信されたテキストの表示のみならず、タイトルや説明のテキストなどもすべてこの関数で処理して出力させています。関数化することにより、同じ処理を何度も書く必要がなくなります。いつでも必要なときに呼び出せば必要な処理が実行されるのです。関数化の利点がよくわかりますね。
■変数のスコープ(利用範囲)
このスクリプトをよくみると、変数についてちょっと面白いことに気がつくでしょう。関数の仮引数でも、それ以外のところでも、$strという変数が使われています。同じ変数をこんなに使い回して、途中で値が書き換わっちゃったりする心配はないのかな?と思った人。実は、関数の中の$strと、外の$strは、別の変数なのです。
変数には、それが利用できる範囲というのが決められています。これは「スコープ」と呼ばれます。関数の中で変数を利用する場合、その変数は「関数の中だけでしか生きられない」ようになっています。その関数を抜けた時点で、その変数は消滅するのです。また再びその関数が呼び出されても、前に呼び出されたときの変数は綺麗サッパリなくなっており、またすべて新たに作られます。
このように、関数の内部で作られ、内部でのみ使われる変数を「ローカル変数」といいます。これに対し、関数の外側で作られ、スクリプト全体で利用可能になっている変数を「グローバル変数」といいます。関数を利用する場合、この「変数のスコープ」ということについてよく理解しておく必要があります。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
<?php function getBoldStr($str){ $str = htmlspecialchars(strtoupper($str)); $res = str_replace('PHP', '<span style="font-weight:bold;color:red">PHP</span>',$str); return $res; } if ($_POST != null){ $str = $_POST['text1']; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>sample page</title> </head> <body> <h1><?php echo getBoldStr("Hello PHP!"); ?></h1> <p><?php echo getBoldStr($str); ?></p> <hr> <p><?php echo getBoldStr("ここに、PHPという文字を含む文章を書いて下さい。"); ?></p> <form method="post" action="./index.php"> <textarea name="text1" cols="40" rows="5"><?php echo $str; ?></textarea> <br><input type="submit"> </form> <hr> </body> </html>
※関連コンテンツ