0

我想编辑用户信息。用户有一个属性:

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**//
}

但是如果我只编辑一个或两个参数,我就不能使用我的功能。
那么如何根据参数的数量来改变功能呢?

例如,我只编辑passenabled属性,为此我的功能将执行:

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

有可能吗?

4

6 回答 6

2

在这种情况下,您通常只需将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']);
    // …
}
于 2013-10-14T10:03:35.490 回答
1

尝试

function editUser($oldname,$newname,$password,$enabled = true,$group = DEFAULT_GRP_ID)

您应该能够使用 3、4 或 5 个参数调用 editUser。PHP 不像 java 那样需要重新声明方法。

D.

于 2013-10-14T10:05:35.173 回答
1

你可以这样做:

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");
于 2013-10-14T10:06:04.317 回答
1

为什么不使用关联数组,array('oldname'=>$oldname,.....)然后使用不为空的值

于 2013-10-14T10:06:41.063 回答
1

您可以为函数中的每个变量定义默认值吗?

function editUser($oldname='',$newname='',$password='',$enabled='',$group='') 
{
if !empty($oldname){do something}
....
}
于 2013-10-14T10:07:41.097 回答
1

一个简单的解决方案是给你的参数默认值,检查它们在函数中是否为空,如果不是,只处理它们。

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, etc.),当参数数量增加时,这既难以阅读又难以维护。解决这个问题的方法是使用命名变量。因为 PHP 确实不直接支持命名变量,手册建议将关联数组作为参数传递

function editUser($args) {
    $member = $mgroup->getMember();
    $member->setName($args["newname"]);
    $member->setPassword($args["password"]);
    if (isset($args["enabled"]))
        $member->setEnabled($args["enabled"]);
    ...
}
于 2013-10-14T10:11:49.823 回答