PHPで配列を関数に参照渡しで渡したらハマった。

$_GETにキーが存在し、かつ数値がどうか確かめたかったので引数を参照渡しで受け取る関数を作ったところ、キーが存在しない場合に勝手にキーが作られてしまいハマってしまいました。サンプルコードは以下。

function hoge( &$get ) {
	if ( isset( $get ) && preg_match( '/^\d+$/', $get ) ) {
		return true;
	} else {
		return false;
	}
}

var_dump( $_GET );
// array (size=0)
//   empty

hoge( $_GET['key'] )

var_dump( $_GET );
// array (size=1)
//   'key' => null

キーが存在しない場合は値が null のキーが作られてしまうようです。参照渡ししなければ良いので、事前に isset でチェックしてから関数に渡せば良いです。

function hoge( $get ) {
	if ( preg_match( '/^\d+$/', $get ) ) {
		return true;
	} else {
		return false;
	}
}

if ( isset( $_GET['key'] ) && hoge( $_GET['key'] ) ) {
	// 処理
}