Home » Php » PHP function with variable as default value for a parameter

PHP function with variable as default value for a parameter

Posted by: admin April 23, 2020 Leave a comment


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?


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).

How to&Answers:

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

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.)


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"];
    //$id = something else

function doSomethingWithID($id)
    //do something


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 );


Yes it is impossible.

The default has to be a static variable:

function actionOne( $id='something') {


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"])


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!


You could use constant variable

function($id = _ID_){