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'] ) ) {
	// 処理
}
  • ブックマーク
  • Feedly

この記事を書いた人

キタジマタカシ

長崎在住、フリーランスのWordPress テーマ / プラグインデベロッパー。 多数のプロダクトをオープンソースで開発・公開しています。現在は WordPress 有料テーマ Snow Monkey を開発・販売しています。