関数


関数を定義する

function 関数名(引数,…){} の形で定義します。

function testFunc($arg1, $arg2){
    echo "arg1: " . $arg1 . " arg2: " . $arg2 . "\n";
}
testFunc("hello", "world");    // => arg1: hello arg2: world

静的関数を定義する

static function 関数名(引数,…){} の形で定義します。

class testClass{
    static private $val = 10;

    static function staticFunc(){
        testClass::$val++;
        echo "val: " . testClass::$val . "\n";
    }
}
testClass::staticFunc();    // => val: 11

関数が存在するか調べる(function_exists)

function_exists()を使用します。

function func1(){
    echo "test func\n";
}
echo "func:" . function_exists(func) . "\n";    // => func:false
echo "func1:" . function_exists(func1) . "\n";    // => func1:true

デフォルト引数を設定する

関数の引数に[引数=値]の形で記述します。
デフォルト引数は定数である必要があります。またデフォルト引数のある引数の後にデフォルト引数のない引数を設定すると警告が出ます。期待通り動作しないでしょう。

function defaultFunc($arg1, $arg2="2", $arg3="3"){
    echo "arg1=$arg1\n";
    echo "arg2=$arg2\n";
    echo "arg3=$arg3\n";
}
defaultFunc(5,6);    // => arg1=5 arg2=6 arg3=3

可変引数を設定する(func_num_args,func_get_arg,func_get_args)

呼び出し側は特別な設定は必要ありません。受け取る関数内でfunc_num_args()やfunc_get_arg(), func_get_args()を使って引数を取得します。
明示的な引数を設定した場合もfunc_get_args()の中に含まれます。

function func3($arg1){
    $count = func_num_args();
    echo "arg count=$count\n";
    $args = func_get_args();
    foreach($args as $arg){
    echo "arg=$arg\n";
    }
}
func3("1", "2", "3");
//  =>
// arg count=3
// arg=1
// arg=2
// arg=3

無名関数を定義する

function(){};の様に記述し変数に代入できます。最後にセミコロンを付ける点に注意が必要です。
関数の引数で渡すことで処理を委譲することもできます。

注意:version5.3から使用できます。

$func = function($arg1, $arg2){
    echo "$arg1 $arg2\n";
};
$func("hello", "world");    // => hello world

関数外の変数を関数内で使用する場合はuseキーワードの後に使う変数名を指定します。
ただし関数が定義された時の変数値が使用されるので、その後の変更を適用したい場合は参照を渡します。

$var = 10;
$func_value = function() use ($var){    // 値渡しタイプ
    echo "var=$var\n";
};
$func_ref = function() use (&$var){    // 参照渡しタイプ
    echo "var=$var\n";
};

$func_value();    // => var=10
$func_ref();    // => var=10

// 参照渡しの方は変更が反映される
$var++;
$func_value();    // => var=10
$func_ref();    // => var=11

今いる関数名を出力する(__FUNCTION__)

__FUNCTION__定数を使用します。

function func_print_test(){
    echo __FUNCTION__ . "\n";
}
func_print_test();    // => func_print_test