関数を実行した結果を得るためには、returnを使います。
<?php
// 引数と100の乗算関数
function kakezan( $number ) {
return $number * 100;
}
// kakezan()関数を呼び出します
echo kakezan( 4 );
?>
上記の関数では、計算式「$number * 100」の結果をreturnで返しています。よって、関数を呼び出したechoの出力結果に、kakezan()関数の計算結果が表示されます。
returnは複数の値を返すことができません。しかし、値ではなく配列を返すことによって、複数の値を返すことができます。
400
<?php
// 返り値を配列で返します
function kakezan( $number1, $number2 ) {
$number1 = $number1 * 100;
$number2 = $number2 * 1000;
return array( $number1, $number2 );
}
// kakezan()関数を実行します
list( $result1, $result2 ) = kakezan( 5, 6 );
echo "$result1<br />n";
echo "$result2";
?>
500 6000
よく使う関数は別ファイルに用意しておき、複数ページで共通に利用できるようにしておけば、同じ関数を何度もコードに書くよりは、はるかに手間が省けます。
別ファイルにまとめたプログラム処理を読み込むことができれば、開発の効率やメンテナンスの点で非常に有用です。
require()関数は、スクリプト内で別ファイルを読み込むことができます。
実際にスクリプト内で別ファイルを読み込んでみます。まず、読み込む対照の「language.php」ファイルを作成します。
<?php
define( "language", "PHP" );
?>
次に、require()関数でlanguage.phpを読み込みます。
<?php
require( "language.php" );
echo language;
?>
上記のスクリプトでは、require文の引数に、読み込む対照のファイル名を渡しています。すると、このスクリプトが実行されるとき、指定されたlanguage.phpに置き換えられます。
PHP
require_once()関数は、require()関数と同様に、スクリプト内で別ファイルを読み込むことができます。ただし、 require()関数と異なる点は、require()関数は外部ファイルを取り込む回数に制限がないのに対して、require_once()関数は外部ファイルを1回だけ取り込みます。
例えば、「a.php」に「b.php」をrequire()関数で読み込んだ場合、「b.php」に「a.php」のrequire()命令が記述されていた場合、無限ループになってしまいます。
require()関数と同様にinclude()関数も、スクリプト内で別ファイルを読み込むことができます。
これから記述するスクリプトは、ループ処理の中にinclude文を置いて、毎回異なるファイルを読み込むようにしています。
<?php
for( $i=1 ; $i<=3 ; $i++ ) {
include( "test" . $i . ".php" );
}
?>
上記のスクリプトでは、ループが実行されるたびに「test1.php」「test2.php」「test3.php」のファイルが存在した場合、各 phpファイルを読み込んでいます。読み込む対照の各phpファイルは、同章でtashizan関数、kakezan関数、warizan関数をそれぞれ定義したファイルです。
100200300
include_once()関数は、include()関数と同様に、スクリプト内で別ファイルを読み込むことができます。 include_once()関数も、require()関数とrequire_once()関数との違いと同様に、include_once()関数は外部ファイルを1回だけ取り込みます。
require()とinclude()は、エラーの扱い方を除けば、その振る舞いは全く同じです。エラーが発生するとinclude()は「Warning」を出力しますが、require()を使用している場合は「Fatal Error」となります。
言い換えると、指定されたファイルが無い場合に処理を停止したい場合は、require()を使用した方が良いということになります。 include()を使用すると、読み込むべきファイルが存在しない場合も処理が続行されます。
具体的に、include()文で記述したスクリプトを使用して、実際に読み込むべきファイル「test2.php」が存在しない場合、require()とinclude()では結果にどのような違いが現れるかを試してみます。
<?php
for( $i=1 ; $i<=3 ; $i++ ) {
require( "test" . $i . ".php" );
}
?>
100 Warning: require(test2.php) [function.require]: failed to open stream: No such file or directory in C:¥require.php on line 5 Fatal error: require() [function.require]: Failed opening required 'test2.php'(include_path='.;C:¥xampp¥php¥pear¥') in C:\require.php on line 5
上記のスクリプトでは、「test1.php」を読み込んだ後、次に読み込もうとした「test2.php」が存在しないため処理を停止し、「Fatal Error」を表示しています。
<?php
for( $i=1 ; $i<=3 ; $i++ ) {
include( "test" . $i . ".php" );
}
?>
100 Warning: include(test2.php) [function.include]: failed to open stream: No such file or directory in C:¥include.php on line 5 Warning: include() [function.include]: Failed opening 'test2.php'for inclusion (include_path='.;C:¥xampp¥php¥pear¥') in C:\include.php on line 5 300
上記のスクリプトでは、「test1.php」を読み込んだ後、次に読み込もうとした「test2.php」が存在しないため「Warning 」を表示しています。しかし、処理は停止することなく、次の「test3.php」を読み込み、最後まで処理が続行されました。