关于PHP可变参数 请问我可以顶下吗?除了用eval还有没有更好的办法 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 function f() { call_user_func_array( 'ff', func_get_args() );} 老大,,其实我想实现new $className(可变参数)这个是我用eval写的$numArgs = func_num_args(); if ($numArgs > 4) { $paras = array(); $argList = func_get_args(); $len = count($argList); for ($n=4; $n < $len; $n++) { $paras[] = "argList[$n]"; } $para = implode(',', $paras); return "new $className($paras);"; } else { return new $className(); } 你的问题提的有点问题:调用函数和创建对象是绝不相关的两回事另外,你最后给出的示例代码也是错误多多eval 方案:class TA { var $a = ''; var $b = ''; var $c = ''; function TA($a,$b,$c) { foreach($this as $k=>$v) { $this->$k = $$k; } }}class TB { function TB() { $this->name = get_class(); }}function foo($classname) { if(func_num_args() > 1) { $ar = array_slice(func_get_args(), 1); return eval("return new $classname('".join("','", $ar)."');"); }else { return new $classname(); }}$p = foo('TA',1,2,3);print_r($p);$p = foo('TB');print_r($p);另一种可行方案(仅供参考)class TA { var $a = ''; var $b = ''; var $c = ''; function TA($a='',$b='',$c='') { foreach($this as $k=>$v) { $this->$k = $$k; } return $this; }}class TB { function TB() { $this->name = get_class(); }}function foo($classname) { if(func_num_args() > 1) { $ar = array_slice(func_get_args(), 1); return call_user_func_array(array(new $classname, $classname), $ar); }else { return new $classname(); }}$p = foo('TA',1,2,3);print_r($p);$p = foo('TB');print_r($p); php采集入库问题 如何让字符串和数组相互转换 PHP做网站用mysql数据库,可以把mysql数据库转换成桌面数据库吗? 刚学PHP,一个非常简单的留言板而已,怎么第三行总提示有错误?麻烦大家看一下 PHP不能持久化类吗? 动态增加文本框的问题,兄弟们帮一下啊 $_SESSION为什么不让打 怎么才能禁止短时间内连续发贴啊? 关于PHP&MYSQL中日期的问题,请各位来瞧一瞧。高分求助。。 为什么在php文件中post提取不到数据 PHP文件上传大小限制 怎么引用 类文件里面的函数
call_user_func_array( 'ff', func_get_args() );
}
new $className(可变参数)这个是我用eval写的$numArgs = func_num_args();
if ($numArgs > 4) {
$paras = array();
$argList = func_get_args();
$len = count($argList);
for ($n=4; $n < $len; $n++) {
$paras[] = "argList[$n]";
}
$para = implode(',', $paras);
return "new $className($paras);";
} else {
return new $className();
}
另外,你最后给出的示例代码也是错误多多eval 方案:
class TA {
var $a = '';
var $b = '';
var $c = ''; function TA($a,$b,$c) {
foreach($this as $k=>$v) {
$this->$k = $$k;
}
}
}class TB {
function TB() {
$this->name = get_class();
}
}function foo($classname) {
if(func_num_args() > 1) {
$ar = array_slice(func_get_args(), 1);
return eval("return new $classname('".join("','", $ar)."');");
}else {
return new $classname();
}
}
$p = foo('TA',1,2,3);
print_r($p);
$p = foo('TB');
print_r($p);另一种可行方案(仅供参考)
class TA {
var $a = '';
var $b = '';
var $c = ''; function TA($a='',$b='',$c='') {
foreach($this as $k=>$v) {
$this->$k = $$k;
}
return $this;
}
}class TB {
function TB() {
$this->name = get_class();
}
}function foo($classname) {
if(func_num_args() > 1) {
$ar = array_slice(func_get_args(), 1);
return call_user_func_array(array(new $classname, $classname), $ar);
}else {
return new $classname();
}
}
$p = foo('TA',1,2,3);
print_r($p);
$p = foo('TB');
print_r($p);