This code produces the result as 56.
function x ($y) { function y ($z) { return ($z*2); } return($y+3); } $y = 4; $y = x($y)*y($y); echo $y;
Any idea what is going inside? I am confused.
Advertisement
Answer
X returns (value +3), while Y returns (value*2)
Given a value of 4, this means (4+3) * (4*2) = 7 * 8 = 56
.
Although functions are not limited in scope (which means that you can safely ‘nest’ function definitions), this particular example is prone to errors:
1) You can’t call y()
before calling x()
, because function y()
won’t actually be defined until x()
has executed once.
2) Calling x()
twice will cause PHP to redeclare function y()
, leading to a fatal error:
Fatal error: Cannot redeclare y()
The solution to both would be to split the code, so that both functions are declared independent of each other:
function x ($y) { return($y+3); } function y ($z) { return ($z*2); }
This is also a lot more readable.