関数の委譲(デレゲーション)とは、外部からの受付は関数Aがやるけど、実際の処理は関数Bに委託してやってもらうことを言います。そんなことをするかというと「楽をするため」です(キッパリ!)。「楽をする」ための関数では「関数の委譲で楽ができる」ということをもう少し考えてみましょう。登録ユーザーのプロフィールデータを取得する関数よくWebシステムにおいては「登録ユーザーのデータをデータベースから取り出す」ということをやることがありますね。仮にその関数を「getUserData()」という関数で実装したとします。引数にはユーザーを特定するための検索条件を入れます。すると返り値にユーザーデータを返します。使って関数内で取り出すようにします。$data;}この場合の検索条件はよく複雑になりがちです。SQL文を直接入れるかもしれないし、引数を複数定義することもあるでしょう。どちらにしろ、厄介な処理の入り口でもあります。(笑)ユーザーデータの中の最小限のデータを取得する関数を作りたい!ところで、システムを組んでいると、ユーザーデータを取得しても、その中の多くのデータが必要ない場合がけっこうあります。「名前」と「ふりがな」だけとか。それがいくつかの箇所で必要となると関数化したいですよね。メールアドレスを削除したいと思うでしょう。$data;}一口メモSQLでは「必要なフィールドだけSELECTすればいいだろ!」というツッコミもあろうかと思いますが、ここではより汎用的なロジックとして考えたいので、そのまま進めますよ。ここでなんとも気持ち悪い感じがする人、多いと思います。引数の扱いがエレガントじゃない。対して引数をまるごと渡したいのに、if文を使っていちいちチェックしないといけないのです。処理を委譲する際に引数を漏れなく指定してあげないといけないからです。この構成は非常に厄介です。使って引数リストを取り出し、そのまま渡せればいいのですが、仕様上それができません。引数を丸投げ委譲そこで便利な関数を紹介。「call_user_func_array()関数」です。この関数の便利な所は、別の関数に渡す引数のリストを配列形式で渡すことができるところ。これだと後で引数の型や数が変動しても、処理を委譲する場合にそのまま丸投げすることができるのです。$this)を指定します。コメントをキャンセルメールアドレスが公開されることはありません。Webサイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。田舎に生まれ育ち東京へ。技術はDTPデザインからプログラミングまで、インフラはCD-ROM全盛からクラウドサーバーまで、いろいろなビジネスを作り、関わってきました(知見を生かして専門学校の講師も3年ほど)。今ではAWSで月間100万PVを超えるサービスを制作・運営しながらさらなるノウハウを蓄積中。このサイトではビジネスをITコンサルタント視点で考え、感じた知見や経験が世の中のお役に立てば、という視点で無料記事として公開しています。最近は機械学習による仕事の効率化を研究中。reserved.代表者のライフハックブログ。