最新記事
(06/29)
(06/04)
(06/03)
(05/30)
(05/28)
|
ニュース
この欄には、このブログの内容に関連するニュースを掲載する予定です。
|
PHP ユーザー定義関数(function)
PHPを勉強中です。ユーザー定義関数を活用すると、コードの記述が楽になるそうです。同じ処理は、ユーザー定義関数をコピーしたり、インクルードファイルから呼びだすだけで済むようになるからです。これを使わない手はないので、どんなものか試してみましょう。
サンプルを作る前に「関数」について考えてみます。
関数というのは、数学の関数も同じですが、式中の変数に値を与えると一定の結果が出るものです。だから、関数を作る前には、インプットするものは何か、アウトプットするものは何かを明確にしておかなければなりません。そして、次にそのアウトプットを得るためにどう処理するかを考えることになります。
それでは、サンプルを作ってみましょう。
課題は、「CSVファイルのデータをHTMLのテーブルで表示する」にします。CSVファイルを使用するときは、中身のデータを確認したいと思うことがあります。「CSVファイルのデータをHTMLのテーブルで表示する」関数を一度作っておけば、いろいろな場面で利用できそうです。ユーザー定義関数を作っておく価値があるとみました。
まずインプットするデータは何かを明確にしましょう。
考えるまでもなく、それは「CSVファイル」の名前ですね。
ではアウトプットするものは何でしょう。
HTMLのテーブルを作成するのだから、HTML文ですね。
それもtableタグやtrタグtdタグを使用したものです。
そうすると、処理としては、指定されたCSVファイルを読み込んで、そのデータにHTMLタグを加えて、画面に出力することになります。出力を行う「echo」文が多用されそうです。
このようにだいたいの予想をしておいて、コードの記述にとりかかります。
まず関数名を決めましょう。
「CSVファイル」を読み込んでテーブルに表示するのだから「fgetcsv2table]とでもしましょう。
ユーザー定義関数を登録する書式は、次のとおりです。
したがって、「fgetcsv2table]という関数を登録するには、次のように記述することになります。
さて、問題は定義内容です。
ユーザー定義関数を使用しないで、CSVファイルのデータを表示した例が「PHP CSVファイルの読込み(fgetcsv) 」にあります。この中から、テーブル表示に関する部分を取り出すと、おおむね次のようなソースになります。
[サンプル]「CSVファイルのデータをHTMLのテーブルで表示する」(ユーザー定義関数なし)
これに手を加えてユーザー定義関数としましょう。
手を加えるのは、table、tr、tdの各要素にclass属性を付与するところです。class属性を加えておけば、スタイルシートでブラウザの表示をコントロールしやすくなります。
tableのclass属性:「csv」
trのclass属性:偶数行は「row_class0」、偶数行は「row_class0」。
(こうしておけば1行おきに色分けできます。)
tdのclass属性:「field」+フィールド番号
(こうしておけばフィールドごとに色分けできます。)
[サンプル]「CSVファイルのデータをHTMLのテーブルで表示する」(ユーザー定義関数)
これでユーザー定義関数のできあがりです。
あとは、これを呼び出して使用します。
ユーザー定義関数を使用するときは、ユーザー定義関数を定義したときの「function」と「{」の間をそのまま使うことができます。その場合は、パラメータの変数は事前に値を与えておきます。もちろん、パラメータに直接、値を入れることもできます。
変数への値の与え方はさまざまです。
フォーム入力させてPOST変数で受けることもできますし、その前の処理の部分で値を代入させておくこともできます。
ここでは、テスト用なのでファイル名は直前に代入しましょう。
[サンプル]「CSVファイルのデータをHTMLのテーブルで表示する」(ユーザー定義関数の呼び出し)
最後に、スタイルシートで1行おきに背景色を変える部分も含めてページ全体のソースを掲載しておきます。
[サンプル]「CSVファイルのデータをHTMLのテーブルで表示する」(ユーザー定義関数)横縞表示
サンプルを作る前に「関数」について考えてみます。
関数というのは、数学の関数も同じですが、式中の変数に値を与えると一定の結果が出るものです。だから、関数を作る前には、インプットするものは何か、アウトプットするものは何かを明確にしておかなければなりません。そして、次にそのアウトプットを得るためにどう処理するかを考えることになります。
それでは、サンプルを作ってみましょう。
課題は、「CSVファイルのデータをHTMLのテーブルで表示する」にします。CSVファイルを使用するときは、中身のデータを確認したいと思うことがあります。「CSVファイルのデータをHTMLのテーブルで表示する」関数を一度作っておけば、いろいろな場面で利用できそうです。ユーザー定義関数を作っておく価値があるとみました。
まずインプットするデータは何かを明確にしましょう。
考えるまでもなく、それは「CSVファイル」の名前ですね。
ではアウトプットするものは何でしょう。
HTMLのテーブルを作成するのだから、HTML文ですね。
それもtableタグやtrタグtdタグを使用したものです。
そうすると、処理としては、指定されたCSVファイルを読み込んで、そのデータにHTMLタグを加えて、画面に出力することになります。出力を行う「echo」文が多用されそうです。
このようにだいたいの予想をしておいて、コードの記述にとりかかります。
まず関数名を決めましょう。
「CSVファイル」を読み込んでテーブルに表示するのだから「fgetcsv2table]とでもしましょう。
ユーザー定義関数を登録する書式は、次のとおりです。
function 関数名(パラメータ){
定義内容
}
したがって、「fgetcsv2table]という関数を登録するには、次のように記述することになります。
function fgetcsv2table($filename){
定義内容
}
さて、問題は定義内容です。
ユーザー定義関数を使用しないで、CSVファイルのデータを表示した例が「PHP CSVファイルの読込み(fgetcsv) 」にあります。この中から、テーブル表示に関する部分を取り出すと、おおむね次のようなソースになります。
[サンプル]「CSVファイルのデータをHTMLのテーブルで表示する」(ユーザー定義関数なし)
<?php
$filename="pref.csv";
$fp = fopen($filename,"r");
if(!($fp)){
die("ファイルをオープンできません。");
}else{
echo "<table class='csv'>\r\n";
while($row=fgetcsv($fp,1000,"r")){
echo"<tr>";
$fields=count($row);
for($i=0;$i<$fields;$i++){
echo "<td>".$row[$i]."</td>";
}
echo "</tr>\r\n";
}
echo "</table>";
fclose($fp);
}
?>
これに手を加えてユーザー定義関数としましょう。
手を加えるのは、table、tr、tdの各要素にclass属性を付与するところです。class属性を加えておけば、スタイルシートでブラウザの表示をコントロールしやすくなります。
tableのclass属性:「csv」
trのclass属性:偶数行は「row_class0」、偶数行は「row_class0」。
(こうしておけば1行おきに色分けできます。)
tdのclass属性:「field」+フィールド番号
(こうしておけばフィールドごとに色分けできます。)
[サンプル]「CSVファイルのデータをHTMLのテーブルで表示する」(ユーザー定義関数)
<?php
###ユーザー定義関数の登録
function fgetcsv2table($filename){
$fp = fopen($filename,"r");
if(!($fp)){
die("ファイルをオープンできません。");
}else{
echo "<table class='csv'>\r\n";
while($row=fgetcsv($fp,1000,",")){
$row_num++;
$row_class=$row_num % 2;
echo"<tr class='row_class".$row_class."'>";
$fields=count($row);
for($i=0;$i<$fields;$i++){
echo "<td class='field".$i."'>".$row[$i]."</td>";
}
echo "</tr>\r\n";
}
echo "</table>";
fclose($fp);
}
}
?>
これでユーザー定義関数のできあがりです。
あとは、これを呼び出して使用します。
ユーザー定義関数を使用するときは、ユーザー定義関数を定義したときの「function」と「{」の間をそのまま使うことができます。その場合は、パラメータの変数は事前に値を与えておきます。もちろん、パラメータに直接、値を入れることもできます。
変数への値の与え方はさまざまです。
フォーム入力させてPOST変数で受けることもできますし、その前の処理の部分で値を代入させておくこともできます。
ここでは、テスト用なのでファイル名は直前に代入しましょう。
[サンプル]「CSVファイルのデータをHTMLのテーブルで表示する」(ユーザー定義関数の呼び出し)
<?php
//テスト用データ
$filename="pref.csv";
//
###ユーザー定義関数fgetcsv2table
fgetcsv2table($filename);
?>
最後に、スタイルシートで1行おきに背景色を変える部分も含めてページ全体のソースを掲載しておきます。
[サンプル]「CSVファイルのデータをHTMLのテーブルで表示する」(ユーザー定義関数)横縞表示
<?php
###ユーザー定義関数の登録
function fgetcsv2table($filename){
$fp = fopen($filename,"r");
if(!($fp)){
die("ファイルをオープンできません。");
}else{
echo "<table class='csv'>\r\n";
while($row=fgetcsv($fp,1000,",")){
$row_num++;
$row_class=$row_num % 2;
echo"<tr class='row_class".$row_class."'>";
$fields=count($row);
for($i=0;$i<$fields;$i++){
echo "<td class='field".$i."'>".$row[$i]."</td>";
}
echo "</tr>\r\n";
}
echo "</table>";
fclose($fp);
}
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Pragma" content="no-cache">
<title>fgetcsv2table()</title>
<style type='text/css'>
<!--
.csv {border-collapse:collapse;}
.csv td {border:#030 solid 1px;}
.row_class0{background-color:#cfc;}
.row_class1{background-color:#fff;}
.field0{text-align:right;}
-->
</style>
</head>
<body>
<?php
//テスト用データ
$filename="pref.csv";
//
###ユーザー定義関数fgetcsv2table
fgetcsv2table($filename);
?>
</body>
</html>
PR