Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Variable assignment in function call

I inherited a php codebase that contains some variable assignments in function calls:

<?php
function some_func($foo, $state) {
  ....
}

some_func("random stuff", $state = true);
...
some_func("other stuff", $state = false);
...
?>

I did some research and some tests, but I can't find out what the defined behaviour for this code is in PHP.

How is the value of the second argument to some_func() computed? The content of the 4state variable (true on first call, false on second)? Or is it the outcome of the assignment (i.e. assigning true/false to the variable $state was successful, so some_func received true?

What is the value of the $state variable in the global scope? The result of the assignment, i.e. true after the first call, false after the second?

like image 865
whyscream Avatar asked Nov 14 '13 09:11

whyscream


People also ask

What is a variable assignment?

Variable Assignment To "assign" a variable means to symbolically associate a specific piece of information with a name. Any operations that are applied to this "name" (or variable) must hold true for any possible values.

How do you call a function that is assigned to a variable in Javascript?

Syntax. Users can follow the below syntax to write the expression for the arrow function. const variable = ( … parameters ) => { // function body } Variable( parameters ); // invoke the arrow function.

Can assign to function call?

The “SyntaxError: can't assign to function call” error is raised when you try to assign a function call to a variable. This happens if you assign the value of a function call to a variable in reverse order. To solve this error, make sure you use the correct syntax to declare a variable.

What is an assignment function?

Definition: Tasks assigned specifically to individual municipalities or regions by state spatial planning are referred to as functions. The aim is the functional/structural (or spatial/functional) division of responsibilities and labour among component territorial entities.


1 Answers

I too had to work with a codebase that had function calls similar to this. Luckily, I had access to developers that wrote the code. Here is what I learned.

Scenario 1:

Simply a way to document the code. You know the variable name that you are passing into the function.

Scenario 2:

Here is a link: http://www.php.net/manual/en/language.references.pass.php If you see, they do specifically call out your case:

foo($a = 5); // Expression, not variable

A 'dummy' pass-by-ref. Depending on your version of PHP, it may throw a warning. I was getting this: Strict Standards: Only variables should be passed by reference in ...

Now let me go into detail of what is happening in this situation.

The dangerous thing is that your example that you have provided wont display the "gotcha!" behavior. In a case like this, your $arg2 that you are echoing outside of the function will always be what the expression in the function call set it to be. Furthermore, the function that is being called will also be sent a "copy" of that value, and work with that. I say "copy" because even though the function is requiring a pass-by-ref, it is actually getting a copy, similar to what a normal function parameter would get.

If you modify the $arg2 that is inside of the function it WILL NOT modify the $arg2 that is outside of the function, as you would expect from a function that is pass-by-ref.

like image 109
CenterOrbit Avatar answered Nov 09 '22 04:11

CenterOrbit