Maison > Questions et réponses > le corps du texte
1:function fn( $name , $age , $sex , $height , $weight . . . ){
} // 如果有 10+ 个参数
2:function fn( $str ){
$str_arr = explode( "@" , $str ) ;
} // 用explode再把参数都拆开
(因为我感觉传入一个数组应该比一个字符串占的空间大)
第一种参数过多,用第二种代替,不知道这样做效率会不会好些,望解答
怪我咯2017-04-11 10:22:03
看你的php版本吧,如果你能控制参数的变化情况,php5.6开始是支持可变参数的,比如这种:
/**
* @see 可变数量的参数列表
* 因函数调用顺序和类型,需要使用可变参数类型的传入形式,或者直接使用func_get_args
*
* @link http://php.net/manual/zh/functions.arguments.php#functions.variable-arg-list
*
* @param array ...$_p 可变参数列表
* @return mixed
* @throws Exception
*/
protected function request(...$_p)
{
// 无效请求
if (!count($_p)) {
throw new Exception("empty params\n");
}
$actionName = array_shift($_p);
// 记录日志用
$p_ = implode(',', $_p);
do {
try {
$response = json_decode(call_user_func_array([self::$_client, $actionName], $_p), true);
if (isset($response['code']) && $response['code'] == 0) {
return $response['data'];
}
error_log("{$this->serviceName}->{$actionName}({$p_}) Error Times({$this->times}) Message: {$response['message']}");
} catch (Exception $e) {
error_log("Exception Times({$this->times}), {$this->serviceName}->{$actionName}({$p_}): {$e->getMessage()}");
sleep(2);
}
} while ($this->times--);
throw new Exception("{$this->serviceName}->{$actionName}({$p_}) Repeat Failed\n");
}
这是我自己用的,就是这么个意思。php5.6之前的版本就用func_get_args这个。就不需要写一大堆参数列表了。
怪我咯2017-04-11 10:22:03
明显传过去一个数组可读性要高很多啊
fn( [
'name' => '',
'age' => 10,
'sex' => MALE,
'height' => 180,
'weight' => 110,
....
]);