Reputation: 5299
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
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
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
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
Reputation: 1853
why don't you use associated array like array('oldname'=>$oldname,.....)
then use value which is not null
Upvotes: 1
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
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