如何用php制作能处理不同数量参数的函数?

如何用php制作能处理不同数量参数的函数?,php,Php,我想编辑用户的信息。用户具有以下属性: User: name password enabled group 如果我一次编辑所有属性就可以了-我只需从POST中获取4个参数,并使用函数保存更改: function editUser($oldname,$newname,$password,$enabled,$group){ //**some code**// $mgroup->getMember()->setName($newname); $mgroup

我想编辑用户的信息。用户具有以下属性:

User:
 name
 password
 enabled
 group
如果我一次编辑所有属性就可以了-我只需从POST中获取4个参数,并使用函数保存更改:

function editUser($oldname,$newname,$password,$enabled,$group){
    //**some code**//
    $mgroup->getMember()->setName($newname);
    $mgroup->getMember()->setPassword($password);
    $mgroup->getMember()->setEnabled($enabled);
    $mgroup->getMember()->setGroup($group);
    //**some code**//
}
但是如果我只编辑一两个参数,我就不能使用我的函数。
那么,如何根据参数的数量改变函数呢

例如,我只编辑
pass
enabled
属性,为此,我的函数将执行以下操作:

function editUser($oldname,$password,$enabled){
    //**some code**//
    $mgroup->getMember()->setPassword($password);
    $mgroup->getMember()->setEnabled($enabled);
    //**some code**//
}

可以这样做吗?

在这种情况下,您通常只需将
NULL
作为字段的参数传递,在这些字段中,您不会更改任何内容,并在setter函数中进行验证:

if ($val !== NULL) {
    $this->property = $val; // set it!
}

如果你真的有很多争论;我将传递一个数组以提高可读性:

editUser(array('oldname' => …, 'newname' => …, …));
并将功能更改为:

function editUser ($array) {
    if (isset($array['newname']))
        $mgroup->getMember()->setName($array['newname']);
    // …
}
试一试

function editUser($oldname,$newname,$password,$enabled = true,$group = DEFAULT_GRP_ID)
您应该能够使用3、4或5个参数调用editUser。PHP不像java那样需要重新声明方法

D.

你可以这样做:

function editUser($oldname,$newname,$password,$enabled,$group){
    if($newname != null){
        $mgroup->getMember()->setName($newname);
    }
    //rinse and repeat for all others
}
然后,当调用函数时,为不想更改的值传递null

editUser("oldName", "newName", null, null, "group");

为什么不使用关联的数组,比如
array('oldname'=>$oldname,…)
然后使用非空的值可以为函数中的每个变量定义默认值吗

function editUser($oldname='',$newname='',$password='',$enabled='',$group='') 
{
if !empty($oldname){do something}
....
}

解决这个问题的一个简单方法是为参数提供默认值,检查它们在函数中是否为null,并且仅在不为null时处理它们

function editUser($oldname, $password, $enabled = null, $newname = null, etc.){
    //**some code**//
    $mgroup->getMember()->setName($newname);
    $mgroup->getMember()->setPassword($password);
    if ($newname != null)
        $mgroup->getMember()->setEnabled($enabled);
    if ($group != null)
        $mgroup->getMember()->setGroup($group);
    //**some code**//
}
此方法的一个缺点是,您不能隐式地保留
$enabled=null
,而仍然显式地设置
$newname=something
(即,您需要调用
editUser($oldname、$password、null、$newname等)
,当参数数量增加时,很难读取和维护。解决方法是使用命名变量。由于PHP不直接支持命名变量,手册建议:


对不起,我的题目没通过。(我的问题是关于不同参数数的函数。@KliverMax是的。正如我所说的:对你不使用的参数传递NULL?哦,对不起,我读了你的答案不好。被认为是你告诉了如何获取POST参数。对你不使用的参数传递
NULL
,只要你没有太多参数就可以了。当随着参数的增加,像
editUser(“foo”,“bar”,null,null,null,true,null,“baz”,null)”这样的行越来越难阅读和维护。在这种情况下有更好的解决方案。请参阅其他答案。@bwoebi:您也可以复制粘贴下面的我的答案。;-)
function editUser($args) {
    $member = $mgroup->getMember();
    $member->setName($args["newname"]);
    $member->setPassword($args["password"]);
    if (isset($args["enabled"]))
        $member->setEnabled($args["enabled"]);
    ...
}