「独習PHP」を元に、要約メモしておきたいと思います。
関数とは、与えられた入力に基づいてなにかしらの結果を返す命令のことを言う。この入力のことを引数、出力のことを戻り値と呼ぶ。関数の基本的な構文は以下。
[戻り値=] 関数名 ([引数1,引数2,...])
引数が2つ以上存在する場合には、カンマ区切りで記述する。引数が存在しない場合での関数名の後のカッコは省略できない。また、関数によっては処理を行うのみで戻り値を持たないものがある。
PHPマニュアルにおける、基本的な構文表記の読み方
void asort (array array [,int sort_flags])
戻り値のデータ型 関数名 (引数のデータ型 仮引数 [,引数のデータ型 仮引数])
引数のデータ型には次のようなものがある
データ型 | 概要 |
---|---|
array | 配列型 |
bool | 真偽型(TRUE | FALSE) |
float | 浮動小数点型 |
int | 整数型 |
mixed | 複数のデータ型を返す可能性がある(戻り値のみ) |
object | オブジェクト型 |
resource | リソース型 |
string | 文字列型 |
void | 戻り値がない(戻り値のみ) |
関数が戻り値を返さない場合、戻り値のデータ型はvoidと表記される。また、関数によっては、たとえば処理に成功した場合はresouce型を、失敗した場合はFALSEを返すようなものがある。このような関数の戻り値はmixed(混合型)と表記される。
ユーザ定義関数
あらかじめ用意されている関数ではなく、自前の関数。
下記はユーザ定義関数の例。showString関数は、与えられた文字列($value)を$num回繰り返す。その歳、$delimで指定された値を文字列の区切り文字として使用する。
<?php
function showString ($value, $num, $delim) {
for ($i=1;$i<=$num;$i++) {
print ($value.$delim);
}
}
showString ('だるまさんが転んだ!',5,'<br/>');
?>
だるまさんが転んだ! だるまさんが転んだ! だるまさんが転んだ! だるまさんが転んだ! だるまさんが転んだ!
ユーザ定義関数を定義するには、function命令を使用する。function命令の一般的な構文は以下。
function 関数名 (仮引数1,仮引数2,...) {
...任意の処理...
[return 戻り値;]
}
仮引数とは、ユーザ定義関数の処理内で参照可能な変数のこと。後からユーザ定義関数を利用する場合、外部の情報をユーザ定義関数に引き渡す際に使用する。ユーザ定義関数の引数を定義するための情報。
省略可能な引数を設定したい場合には、次のように仮引数の後方にデフォルト値を明記する。これによって、引数が省略された場合には、指定されたデフォルト値が使用される。
<?php
function showString ($value, $num, $delim='<br />') {
for ($i=1;$i<=$num;$i++) {
print ($value.delim);
}
}
showString ('だるまさんが転んだ!',5);
?>
ただし、省略可能な引数は、必ず必須である引数の後方に配置するようにする。たとえば次のような記述は不可。
function showString ($value, $delim='<br />', $num) {</code></pre></p>
<p>ユーザ定義関数が戻り値を持つ場合は、return命令を使用して処理結果を呼び出し元に返す。return命令が記述されなかった場合、ユーザ定義関数は戻り値を返さない。</p>
<h3>関数の有効範囲</h3>
<p><pre><code><?php
$x=1;
function sample() {
$x++;
return $x;
}
print (sample());
?>
1
関数内の変数をローカル変数、関数外の変数をグローバル変数と呼ぶ。 上の例では、最初に初期化された$xはグローバル変数で、次にユーザ定義関数の中で定義された$x(ローカル変数)とは全くの別物。
グローバル変数を強制的にローカル変数として利用したい場合には、globalキーワードを使用する。
<?php
$x=1;
function sample() {
global $x;
$x++;
return $x;
}
print (sample());
?>
2
外部ファイルのインクルード
ユーザ定義関数はその性質上、特定のスクリプトでだけ利用するよりも、複数のスクリプトで共有することが多い。外部ファイルとして保存しておき、必要に応じてインクルード(取り込む)のが好ましいアプローチ。 外部ファイルをインクルードするには、include_once命令またはrequire_once命令を使用する。
included.php
<?php
function showString ($value, $num, $delim) {
for ($i=1;$i<=$num;$i++) {
print ($value.$delim);
}
}
?>
include.php
<?php
include_once ('included.php');
showString ('だるまさんが転んだ!',5,'<br />');
?>
require.php
<?php
require_once ('included.php');
showString ('だるまさんが転んだ!',5,'<br />');
?>
外部ファイルが存在しなかった場合、include_once関数は警告を発するだけだが、require_once関数はエラーとし、スクリプトの実行を中断する。