1:function fn( $name , $age , $sex , $height , $weight . . . ){
} // 如果有 10+ 个参数
2:function fn( $str ){
$str_arr = explode( "@" , $str ) ;
} // 用explode再把参数都拆开
(因为我感觉传入一个数组应该比一个字符串占的空间大)
第一种参数过多,用第二种代替,不知道这样做效率会不会好些,望解答
业精于勤,荒于嬉;行成于思,毁于随。
看你的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这个。就不需要写一大堆参数列表了。
明显传过去一个数组可读性要高很多啊
fn( [ 'name' => '', 'age' => 10, 'sex' => MALE, 'height' => 180, 'weight' => 110, .... ]);
这就好比马云想买一瓶水,有一瓶三元有一瓶是两元的,你告诉马云买两元的吧,更省钱。
用@作分隔符到时候参数带@就不好办了啊
为什么不传一个数组呢
可以直接定义一个类,传进去一个对象
传数组 不过传字符串的话单纯@符号分割 也是需要对每个参数位置进行限定吧 这样感觉还不如直接传单个参数?
一般用数组,否则你就要反思下你这个方法存在的必要性了
数组传,或是php5.6+的支持可变参数
https://segmentfault.com/q/10...
看你的php版本吧,如果你能控制参数的变化情况,php5.6开始是支持可变参数的,比如这种:
这是我自己用的,就是这么个意思。php5.6之前的版本就用func_get_args这个。就不需要写一大堆参数列表了。
明显传过去一个数组可读性要高很多啊
这就好比马云想买一瓶水,有一瓶三元有一瓶是两元的,你告诉马云买两元的吧,更省钱。
用@作分隔符到时候参数带@就不好办了啊
为什么不传一个数组呢
可以直接定义一个类,传进去一个对象
传数组 不过传字符串的话单纯@符号分割 也是需要对每个参数位置进行限定吧 这样感觉还不如直接传单个参数?
一般用数组,否则你就要反思下你这个方法存在的必要性了
数组传,或是php5.6+的支持可变参数
https://segmentfault.com/q/10...