Reputation: 13394
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
Reputation: 224
shortest way is:
function actionOne($id = null)
{
$id = $id ?? $_GET["ID"];
...
}
Upvotes: 1
Reputation: 342
You could use constant variable
define('ID',$_GET["ID"]);
function($id = _ID_){
//code
}
Upvotes: 2
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
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
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
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
Reputation: 146302
Yes it is impossible.
The default has to be a static variable:
function actionOne( $id='something') {
//code
}
Upvotes: 1