2018-07-16(Mon)

PHP:call_user_func_array を使わずに bind_param する

codeimage8.png

PHP の mysqli でステートメントを展開するとき、ステートメントに含まれる値の個数が不定でも楽チンに bind_param() へ渡すため、よく call_user_func_array() を使用する方法が紹介されており、ワタシもアタリマエにそうやっていた。

これが ...演算子で一発で書けることを今更知ったのでメモ。

call_user_func_array() を使用する例。
冗長で、参照による割り当て( =& )も必要になる。

// call_user_func_array() 経由で
// 可変個なステートメントを $stmt->bind_param() する

function hoge($stmt, $stmtArr)
{
// 直接 $stmtArr を call_user_func_array() に渡せないため
// 一旦 $params をリファレンスで作成する

$params = [];
foreach ($stmtArr as $key => $value) {
$params[$key] =& $stmtArr[$key]; // =& は避けたい
}
// call_user_func_array() 経由で $stmt->bind_param() を実行
call_user_func_array(array($stmt, 'bind_param'), $params);
}


...演算子を使用する例。
※ ...演算子 (splat) PHP5.6以降

// ウホ ...演算子で直接 $stmt->bind_param() へ渡せてスッキリ
$stmt->bind_param($paramType, ...$stmtArr);

プロフィール

nakami

Author:nakami
可愛いテンプレートに似合う俺
うそAチームのスミス大佐

NAVI
カテゴリー
最近の記事
リンク
FC2カウンター
ブログ内検索
RSSフィード