LoginSignup
29
18

More than 5 years have passed since last update.

PHP5技術者認定試験(上級)に学ぶ、実はよく知らないPHPの仕様 (1)

Last updated at Posted at 2017-06-19

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() などの引数としても利用可能

終わりに

29
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
18