by shigemk2

当面は技術的なことしか書かない

call_user_func_arrayを使い、可変長引数を受けて、可変長引数の関数に渡してみよう

可変長引数を受けて、可変長引数の関数に渡す - おぎろぐはてな
PHP: call_user_func_array - Manual

call_user_func_arrayとは、 パラメータの配列を指定してコールバック関数をコールする関数。
これを使うだけなら別に可変長引数を受けて可変長引数の関数に渡すことは出来ないが、
func_get_argsを組み合わせることで、(一応)可変長引数を可変長引数の関数に渡すことが出来る。

<?php
function fopen_original() {
  $args = func_get_args();
  $str = implode(" ", $args);
  $fp = fopen("/Users/shige/langrichfile/cron.log", "a");
  call_user_func_array("fprintf", array($fp, "%s %s\n", date("Y-m-d H:i:s"), $str));
  fclose($fp);
}

fopen_original("\アッカリ〜ン/", "ハーイ");
fopen_original("ひゃあああああ", "うまいいいいい", "やっぱり機械で割った(ry");

これ実行してみたら、

2012-08-29 20:38:57 \アッカリ〜ン/ ハーイ
2012-08-29 20:38:57 ひゃあああああ うまいいいいい やっぱり機械で割った(ry

ってなるけど、これってどうかな?