構造化とオブジェクト指向 (1/7)
作成:2010-12-11 16:06
更新:2010-12-11 16:06
更新:2010-12-11 16:06
■関数で構造化する
プログラミングのレベルというのは、何で決まるか? それは、実は「量」である、といえます。全部で100行のプログラムならアマチュアでも書くことができます。が、1000行のプログラムは、ビギナーには書けません。1万行のプログラムは、プロでないと難しいでしょう。それは、使っている関数が難しいとかアルゴリズムが複雑とかいうこと以前の問題です。つまり、「どれくらい大きなプログラムをきちんと整理し把握できるように設計できるか」という問題なのです。
100行のプログラムは、ただだらだらと書くだけでも作れます。PHPでいくつものフォームを送信したりするだけでもあっという間に作れてしまうでしょう。が、1000行のプログラムは、それでは作れません。プログラムを、その役割ごとに整理し、必要に応じて必要な処理を呼び出すような構造をきちんと考え設計しなければいけません。これが「構造化」という考え方です。
PHPにおける構造化の第一歩は、「関数」です。ただ、だらだらと書いていたスクリプトを整理し、部分部分を切り離して「関数」として定義していくことで、全体をきれいにわかりやすく設計する、これが「より大きなプログラムが書けるようになる」ための第一歩といえるでしょう。
関数というと、これまでechoとかimplode/explodeとかfopen/fcloseとか、さまざまなものが登場しましたね。PHPでは、基本的な機能はすべて関数として定義されていました。が、関数というのは、そうした「PHP本体に用意されているもの」だけではありません。自分でスクリプトを書いて定義することもできるのです。この関数は、以下のように定義します。
自分で関数を定義する際にも、その関数でどういう値が必要となるのかを考え、それを引数に指定します。これは、関数定義の()内に、受け渡される値を収める変数を記述しておきます。これが「仮引数」と呼ばれるものです。関数を呼び出すと、引数に指定された値が、この仮引数の変数に代入されます。そして以後は、この変数を使って渡された引数の値を利用できる、というわけです。
返値は、その関数を呼び出した側に結果の値を送り返すためのものです。これは、送り返したい値を「return 値;」という形で記述します。このreturnは、その関数を抜け出し、指定した値を呼び出した側に返します。ここで処理を抜け出しますから、returnの後に処理があってもそれは実行されません。
では、関数を実際に使ってみましょう。まずは、関数を利用する前のソースコードを挙げておきます。ここでは、テキストを書いて送信すると、「PHP」というテキストをすべてボールドで表示する、というものを考えてみました。送信されたテキストを、str_replace関数で置換しているだけのシンプルなものです。なお、ここでは送られてきたテキストを「strtoupper」という関数で処理しています。これは、半角アルファベットをすべて大文字にしたテキストを返す関数です。
100行のプログラムは、ただだらだらと書くだけでも作れます。PHPでいくつものフォームを送信したりするだけでもあっという間に作れてしまうでしょう。が、1000行のプログラムは、それでは作れません。プログラムを、その役割ごとに整理し、必要に応じて必要な処理を呼び出すような構造をきちんと考え設計しなければいけません。これが「構造化」という考え方です。
PHPにおける構造化の第一歩は、「関数」です。ただ、だらだらと書いていたスクリプトを整理し、部分部分を切り離して「関数」として定義していくことで、全体をきれいにわかりやすく設計する、これが「より大きなプログラムが書けるようになる」ための第一歩といえるでしょう。
関数というと、これまでechoとかimplode/explodeとかfopen/fcloseとか、さまざまなものが登場しましたね。PHPでは、基本的な機能はすべて関数として定義されていました。が、関数というのは、そうした「PHP本体に用意されているもの」だけではありません。自分でスクリプトを書いて定義することもできるのです。この関数は、以下のように定義します。
function 関数名 ( 仮引数1 , 仮引数2 , …… ) {関数を作成するとき、考えなければならないのは「引数」と「返値」です。引数というのは、関数を呼び出す際に渡される値のことです。今までも、例えばfopen("data.txt");といった具合に、関数を呼び出す際には()内に必要な値を入れて呼び出しました。これが引数ですね。
……ここに実行する処理を書く……
……結果を返すなら、最後にreturnする……
}
自分で関数を定義する際にも、その関数でどういう値が必要となるのかを考え、それを引数に指定します。これは、関数定義の()内に、受け渡される値を収める変数を記述しておきます。これが「仮引数」と呼ばれるものです。関数を呼び出すと、引数に指定された値が、この仮引数の変数に代入されます。そして以後は、この変数を使って渡された引数の値を利用できる、というわけです。
返値は、その関数を呼び出した側に結果の値を送り返すためのものです。これは、送り返したい値を「return 値;」という形で記述します。このreturnは、その関数を抜け出し、指定した値を呼び出した側に返します。ここで処理を抜け出しますから、returnの後に処理があってもそれは実行されません。
では、関数を実際に使ってみましょう。まずは、関数を利用する前のソースコードを挙げておきます。ここでは、テキストを書いて送信すると、「PHP」というテキストをすべてボールドで表示する、というものを考えてみました。送信されたテキストを、str_replace関数で置換しているだけのシンプルなものです。なお、ここでは送られてきたテキストを「strtoupper」という関数で処理しています。これは、半角アルファベットをすべて大文字にしたテキストを返す関数です。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
<?php if ($_POST != null){ $str = $_POST['text1']; $str = htmlspecialchars(strtoupper($str)); $result = str_replace('PHP','<b>PHP</b>',$str); } ?> <!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>Hello PHP!</h1> <p><?php echo $result; ?></p> <hr> <p>ここに、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>
※関連コンテンツ