The Bndr
The Bndr

Reputation: 13394

PHP function with variable as default value for a parameter

By default a PHP function uses $_GET variables. Sometimes this function should be called in an situation where $_GET is not set. In this case I will define the needed variables as parameter like: actionOne(234)

To get an abstract code I tried something like this:

function actionOne($id=$_GET["ID"])

which results in an error:

Parse error: syntax error, unexpected T_VARIABLE

Is it impossible to define an default parameter by using an variable?

Edit

The actionOne is called "directly" from an URL using the framework Yii. By handling the $_GET variables outside this function, I had to do this on an central component (even it is a simple, insignificant function) or I have to change the framework, what I don't like to do.

An other way to do this could be an dummy function (something like an pre-function), which is called by the URL. This "dummy" function handles the variable-issue and calls the actionOne($id).

Upvotes: 35

Views: 40546

Answers (7)

Hosserin Ibrahim
Hosserin Ibrahim

Reputation: 224

shortest way is:

function actionOne($id = null)
{
     $id = $id ?? $_GET["ID"];
     ...
}

Upvotes: 1

pablo henrique
pablo henrique

Reputation: 342

You could use constant variable

define('ID',$_GET["ID"]);
function($id = _ID_){
    //code
}

Upvotes: 2

Mihail Gershkovich
Mihail Gershkovich

Reputation: 516

Easy peanuts!
(Might contain minor mistakes, errors or typos!)

You need a helper function, which will call you main function recursively, but having NULL as default:

Wrong: function actionOne($id=$_GET["ID"])

Right:

function actionOne($id) {...}
function actionOnewithID($id=NULL) {
  if (NULL==$id){actionOne($_GET["ID"]);}
  else {actionOne($id);
}

And if you need to return a value:

function actionOne($id) {...}
function actionOnewithID($id=NULL) {
  if (NULL==$id){return(actionOne($_GET["ID"]));}
  else {return(actionOne($id));
}

I hope this helps!

Upvotes: 1

Galen
Galen

Reputation: 30170

function actionOne( $id=null ) {
    if ($id === null) $id = $_GET['ID'];
}

But, i would probably do this outside of the function:

// This line would change, its just a for instance
$id = $id ? $id : $_GET['id'];
actionOne( $id );

Upvotes: 4

John Parker
John Parker

Reputation: 54445

No, this isn't possible, as stated on the Function arguments manual page:

The default value must be a constant expression, not (for example) a variable, a class member or a function call.

Instead you could either simply pass in null as the default and update this within your function...

function actionOne($id=null) {
    $id = isset($id) ? $id : $_GET['ID'];
    ....
}

...or (better still), simply provide $_GET['ID'] as the argument value when you don't have a specific ID to pass in. (i.e.: Handle this outside the function.)

Upvotes: 56

markus
markus

Reputation: 40675

You should get that id before you call the function. Checking for the existence of the parameter breaks encapsulation. You should do something like that:

if (isset($_GET["ID"])
{
    $id = $_GET["ID"];
}
else
{
    //$id = something else
}

function doSomethingWithID($id)
{
    //do something
}

Upvotes: 4

Naftali
Naftali

Reputation: 146302

Yes it is impossible.

The default has to be a static variable:

function actionOne( $id='something') {
    //code
}

Upvotes: 1

Related Questions