php 函数参数过多时,如果用字符串代替效率怎么样?
迷茫
迷茫 2017-04-11 10:20:03
0
10
739

1:function fn( $name , $age , $sex , $height , $weight . . . ){

} // 如果有 10+ 个参数

2:function fn( $str ){

$str_arr = explode( "@" , $str ) ;

} // 用explode再把参数都拆开

(因为我感觉传入一个数组应该比一个字符串占的空间大)

第一种参数过多,用第二种代替,不知道这样做效率会不会好些,望解答

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

reply all(10)
刘奇

看你的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,
  ....
]);
洪涛

这就好比马云想买一瓶水,有一瓶三元有一瓶是两元的,你告诉马云买两元的吧,更省钱。

迷茫

用@作分隔符到时候参数带@就不好办了啊

伊谢尔伦

为什么不传一个数组呢

PHPzhong

可以直接定义一个类,传进去一个对象

阿神

传数组 不过传字符串的话单纯@符号分割 也是需要对每个参数位置进行限定吧 这样感觉还不如直接传单个参数?

巴扎黑

一般用数组,否则你就要反思下你这个方法存在的必要性了

刘奇

数组传,或是php5.6+的支持可变参数

Ty80

https://segmentfault.com/q/10...

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template