【发布时间】:2013-07-09 20:25:19
【问题描述】:
我得到了这个功能:
///////////////////////////////////////////////////////////////
public static function make_table( $inputList, $funcArray ,$fieldArray){
$i = 0;
$result = Array();
foreach($inputList as $element){
$j = 0;
foreach($funcArray as $function){
$result[$i][$fieldArray[$j]] = $element->$function();
$j++;
}
$i++;
}
return $result;
}
其中 inputList 是 Ticket_Reply 项目的列表(其中包含类 ticket_content 的实例变量)。funcArray 是要执行的函数列表。
/////////////////////////////////// 我是这样执行的:
$result['ticket_replies'] = make_table($entire_ticket['reply_array'], Array("getTReplyId","getContent()->getContent","getTimestamp"), Array("tReplyId","replyContent","timestamp"));
我在传递 getContent()->getContent 时尝试做的是执行 Ticket_Reply 对象的 getContent,该对象返回一个 ticket_content 对象,然后对该返回的对象执行 getContent 以返回表示内容的文本。
/////////////////////////////////// // 如果我用函数数组执行这个
Array("getTReplyId","getContent()","getTimestamp")
而不是
Array("getTReplyId","getContent()->getContent","getTimestamp")
然后我的输出由 print_r 找到:
Array ( [0] => Array ( [tReplyId] => 1 [replyContent] => Ticket_Content Object ( [tContentId:Ticket_Content:private] => 1 [content:Ticket_Content:private] => ik krijg het spel niet installed! [db] => Array ( [host] => localhost [port] => 3306 [name] => ryzom_ams_lib [user] => root [pass] => xxxxxx ) ) [timestamp] => 2013-07-08 14:47:19 ) [1] => Array ( [tReplyId] => 5 [replyContent] => Ticket_Content Object ( [tContentId:Ticket_Content:private] => 5 [content:Ticket_Content:private] => Help he got hacked! [db] => Array ( [host] => localhost [port] => 3306 [name] => ryzom_ams_lib [user] => root [pass] => xxxxxx ) ) [timestamp] => 2013-07-09 00:48:17 ) )
如您所见,replyContent是ticke_content类的对象,而ticket_content类提供了getContent函数,所以我猜$funcArray中的getContent()->getContent会执行该对象的getContent,但取而代之的是它给出了警告:
Fatal error: Call to undefined method Ticket_Reply::getContent()->getContent()
其中 Ticket_Reply 是 inputList 的实际对象的类的名称
现在已经有人告诉我使用 call_user_func_array,我尝试过,但没有多大成功。
public static function make_table( $inputList, $funcArray ,$fieldArray){ $i = 0; $result = Array(); foreach($inputList as $element){ $j = 0; foreach($funcArray as $function){ $result[$i][$fieldArray[$j]] = call_user_func_array(array_merge(array($element), $function),array()); $j++; } $i++; } return $result; }
使用参数:
make_table($entire_ticket['reply_array'], Array(Array("getTReplyId"),Array("getContent", "getContent"),Array("getTimestamp")), Array("tReplyId","replyContent","timestamp"));
虽然有警告:
Warning: call_user_func_array() expects parameter 1 to be a valid callback, array must have exactly two members
而且他们没有返回正确的结果。真的可以这样做吗?
【问题讨论】:
标签: php function parameters parameter-passing