如何在__construct 内传不定参数且保留 key 值且使用常规的方式如 a = new A (123, 123)????

如何在__construct内传不定参数且保留key值且使用常规的方式如a = new A(123, 123)????

如题,被出了一个难题,小白来问问大佬们有没有什么好方法。情况是我要向construct传不定的参数,然后作为get的参数组装路由发出去,但是所有参数都不一定是必填的。我之前的做法是传一个array,这样可以同时保留key和value,传过去用func_get_args也可以直接拿到array,不需要再变。

但是今天被告知传array的方式不够直观,用接口的人无法通过ctrl+q(就是查看方法可以传什么参数)的方式了解接口,请问有没有什么好方法可以如: a = new A (a = 123, b = 456)这种方法在construct内同时拿到key、value,因为如果直接传(123, 456)的话丢失了key,在组装路由的时候就没办法确认哪个是哪个了。

如有方案,不胜感激。:dizzy_face:

看到有回答说问题讲的很不清楚,重新编辑下:

class A extends request {
    ...
}

这里有个A方法,可以传a->z 26个参数,但是大部分是不必填的,如民族、身高、blablabla
我的调用:

a = new A(array(a => '123', b=> '456', 'e'=> '789', 'g' => '123123'))

但是因为传参不明确 被要求做出来一个能看到这二十六个参数,方便用接口的人了解接口,请问大佬们有没有什么好方法。。。

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

你这个需求让我想到了修改数据库信息,例如:$user->update($data);,同样是传不定数目的参数,但我们都是使用的数组方式,也没看出哪里不直观了。

我觉得你可以写一份详细的接口说明文档,然后去沟通一下,直接说目前的是最好的方案,不清楚传什么参数的话看接口文档。有详细的文档说明,你管我怎么实现的?老老实实按照我给的文档进行调用就是了。(个人感觉要拿出这种气势来,否则一会儿这要改一会儿那要改的,烦都要烦死)

3年前 评论
Checkm8 (楼主) 3年前
自由与温暖是遥不可及的梦想 3年前
讨论数量: 5

描述的很混乱没头没尾,盲猜,php没有类似于dart、python那种按参数名传承的办法。直接构造函数接参即可,你最后的一句话就是笑话了:

因为如果直接传 (123, 456) 的话丢失了 key,在组装路由的时候就没办法确认哪个是哪个了

例如:

$class = new TestClass(123, 456);

首先,书写TestClass的人肯定是知道顺序的,你却在考虑使用者不清楚,那他为什么不去看TestClass的源码进行对应的传参,类似python、dart那种可以传命名参数的,也不是让使用者不遵循它的规则的!

3年前 评论
Checkm8 (楼主) 3年前
Siam (作者) 3年前

PHPDoc ba

3年前 评论
Checkm8 (楼主) 3年前

难道定义的时候不是__construct ($a = '', $b = '' ......),怎么会丢失顺序呢?

3年前 评论
Checkm8 (楼主) 3年前

你这个需求让我想到了修改数据库信息,例如:$user->update($data);,同样是传不定数目的参数,但我们都是使用的数组方式,也没看出哪里不直观了。

我觉得你可以写一份详细的接口说明文档,然后去沟通一下,直接说目前的是最好的方案,不清楚传什么参数的话看接口文档。有详细的文档说明,你管我怎么实现的?老老实实按照我给的文档进行调用就是了。(个人感觉要拿出这种气势来,否则一会儿这要改一会儿那要改的,烦都要烦死)

3年前 评论
Checkm8 (楼主) 3年前
自由与温暖是遥不可及的梦想 3年前

这种处理还可以考虑构造方法中传对象来处理,调接口的人可从参数对象中明显知道参数设置,比如:

class Config
{
    public $a;
    public $b;
    public $c;

    /**
     * 设置单个属性
     *
     * @param $a
     * @return $this
     */
    public function setA($a)
    {
        $this->a = $a;

        return $this;
    }

    /**
     * 批量设置属性
     *
     * @param array $arr
     * @return $this
     */
    public function updateByArray(array $arr)
    {
        foreach ($arr as $k=>$v){
            $this->$k = $v;
        }

        return $this;
    }
}
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!