关于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视频教程网站 好久沒來CSDN了。改版了?我不能回貼了? php下载图片 高手进来帮忙看下,哪里出问题了 数组处理 看了几天框架,有点总结... pnp和.net网站的数据交换及安全问题 seesion失效的问题 如何把一个datetime型数据转换成时间戳格式? 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);