PHP5技術者認定試験(上級)
資格試験に向けて勉強中です
勉強していて、PHPについて実は知らなかった/勘違いしていたことが幾つかあるため
参考書の内容を抜粋して記載します。(抜粋するとは言っていない)
関数
関数とは
- ひとまとまりのコードに名前をつけたもの
- 入力を受ける変数を パラメータ 出力を 返り値 と呼ぶ
- 関数には ユーザ定義関数 と 組み込み関数 がある
- 関数の呼び出しが、その関数の定義より前に記述されていても問題ない
マイナーな細かい仕様
- 関数名の大文字・小文字は 区別されない
- 関数は入れ子にできる
- 以下のbar()はfoo()の実行後であれば、fooの外でも呼び出せる
function foo(){
function bar(){
return "bar";
}
}
foo();
bar();
変数
- グローバルスコープ と 関数レベルのスコープ がある
- 関数からグローバル変数を呼ぶ場合は
global $hensu
のように宣言が必要 - (デフォルトでは)関数内からグローバルスコープにアクセスできない
-
static $number = 0
のように宣言することで、呼び出し後も保持される変数となる- 上記の場合
0
が代入されるのは最初の実行時のみ - 初期化に使えるのは 定数 または リテラル のみ。変数や式は使えない。
-
static $number = $x
はエラーになる
-
- 上記の場合
関数のパラメータ
- 値渡しと参照渡しがある
- 参照渡しは
function foo(&$x){
のように & を付加する - 参照渡しで定義した関数に変数以外を渡すと Fatal Error になる
-
function($x = 10)
のようにしてデフォルト値を設定できる。 -
function(&$x = 10)
のように、 参照渡しでもデフォルト値を設定できる 。 - 可変長引数も利用可能
- 通常の引数の定義は必要なく、以下の関数を使用して取得
関数名 | 機能 |
---|---|
func_num_args() | 引数の数を取得 |
func_get_arg($index) | 指定indexの引数を取得 |
func_get_args() | 引数を配列で取得 |
関数の返り値
- デフォルトでは return で指定された値のコピーを返す
- 参照を受け取る場合は、 & を 関数名の前につける
function &foo(&$x){
return $x;
}
$value = &foo
可変関数
- 変数名に関数名の文字列を設定して呼び出すことが可能
$func_name = "printf";
$func_name("hello");
- 対応する関数が無いとエラーが発生するので、
function_exsists($func_name);
でチェックしよう -
echo()
やisset()
の構造言語は、この方法で 呼び出せない (エラーになる) - (だが黒本には構造言語について説明がない)
匿名関数 create_function
- 他と衝突しない、ランダムな関数名となる
-
create_function(string $arg, string $code )
で定義 - $付きの変数名を記載する関係上、シングルクォートで記載しましょう
$method = create_function('$x', 'echo $x;');
$mechod('hello');
- 匿名関数は
array_filter()
などの引数としても利用可能