PHP でのユーザー定義関数に関する基本的な事項のメモ。
function 関数名 (引数...) {
処理するコード
return 戻り値;
}
ユーザー定義関数( h() )の例
次の関数(htmlspecialchars)のパラメータを毎回指定しなくても良いようにする例。また関数名も長いので短くすることで記述が簡単になる。
以下のように定義しておけば、上記の関数は「h(変換される文字列)」で呼び出せる。
<?php
function h($var) {
$html = htmlspecialchars($var, ENT_QUOTES, 'UTF-8');
return $html;
}
echo h('HTMLでは < は < と記述します。');
[/code]
<h4>変数のスコープ</h4>
変数には、その変数が有効な(利用できる)範囲があり、それを「変数のスコープ」という。
<ul>
<li>通常の変数はプログラムのどこでも有効で、これを「グローバル変数」という</li>
<li>関数定義内にある変数は、その関数の定義内でしか有効ではなく、これを「ローカル変数」という</li>
<li>$_GET, $_COOKIEなどは、関数定義内でも有効で、これを「スーパーグローバル変数」という</li>
</ul>
<h4>可変変数</h4>
可変変数とは、「変数名を変数によって決める」ことができる変数。可変変数では、先頭に「$」を2つ重ねることで、変数名を別の変数値で動的に決定できる。
<?php
$x = 'title';
$title = 'PHP:Hypertext Preprocessor';
print($$x); //PHP:Hypertext Preprocessorと表示される
//可変変数 $$x は、$x の内容が評価(展開)された結果、$title と同じ意味になる
?>
2番めの引数($data)が配列の場合の例。
function display($_template, $data) {
foreach($data as $key => $val) {
$$key = $val; //$keyが'title'だとすると $title = $val となる
}
....(省略)
}
前述のユーザー定義関す「h($var)」で、引数に配列が渡されても処理できるようにするには以下のようにすると可能。
function h($var){
if(is_array($val)){
return array_map('h', $var);
//$varが配列の場合、h()関数をそれぞれの要素について呼び出す(再帰)
}else{
return htmlspecialchars($var, ENT_QUOTES, 'UTF-8');
}
}