Kliver Max
Kliver Max

Reputation: 5299

How to make function which can handle with diffetent number of parameters with php?

I want to edit user's information. User have a attributes:

User:
 name
 password
 enabled
 group

It's fine if i edit all attributes at once - i just get 4 parameters from POST and use function for save changes:

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

But if i am editing just a one or two parameters i cant use my function.
So how can i change function depending on the number of parameters?

For example i edit just pass and enabled attributes, for this my function gonna do:

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

It's possible to do?

Upvotes: 0

Views: 68

Answers (6)

bwoebi
bwoebi

Reputation: 23777

In such cases you usually just pass NULL as argument for the fields where you don't change anything and verify in your setter function:

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

If you have really a lot of arguments; I'd pass an array to improve readability:

editUser(array('oldname' => …, 'newname' => …, …));

And change the function to:

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

Upvotes: 2

sshine
sshine

Reputation: 16105

A simple solution to this is to give your arguments default values, check if they're null inside the function and only deal with them if they're not.

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

One drawback with this method is that you cannot leave $enabled = null implicitly and still set $newname = something explicitly (i.e. you need to call editUser($oldname, $password, null, $newname, etc.), which is both hard to read and maintain when the number of arguments grow. A solution to this is to use named variables. Since PHP does not directly supported named variables, the manual suggests passing an associative array as argument:

function editUser($args) {
    $member = $mgroup->getMember();
    $member->setName($args["newname"]);
    $member->setPassword($args["password"]);
    if (isset($args["enabled"]))
        $member->setEnabled($args["enabled"]);
    ...
}

Upvotes: 1

long
long

Reputation: 218

Can you define default values for each variable in your function?

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

Upvotes: 1

Pankaj Sharma
Pankaj Sharma

Reputation: 1853

why don't you use associated array like array('oldname'=>$oldname,.....) then use value which is not null

Upvotes: 1

Scott Helme
Scott Helme

Reputation: 4799

You can do it like so:

function editUser($oldname,$newname,$password,$enabled,$group){
    if($newname != null){
        $mgroup->getMember()->setName($newname);
    }
    //rinse and repeat for all others
}

Then when you call the function pass null for values you don't want to change.

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

Upvotes: 1

Daniele Vrut
Daniele Vrut

Reputation: 2873

Try with

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

You should be abled to call editUser with 3, 4 or 5 parameters. PHP isn't like java where you need to redeclare methods.

D.

Upvotes: 1

Related Questions