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

しかし、1 つまたは 2 つのパラメーターだけを編集している場合、関数を使用できません。
では、パラメータの数に応じて関数を変更するにはどうすればよいですか?

たとえば、私はただ属性を編集passenabledます。このために、私の関数は次のことを行います。

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

それは可能ですか?

4

6 に答える 6

1

これに対する簡単な解決策は、引数にデフォルト値を与え、それらが関数内で 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**//
}

この方法の欠点の 1 つは、$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 に答える
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

関数内の各変数のデフォルト値を定義できますか?

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