# Function inside a function.?

### Question

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.

1
61
2/9/2014 6:32:54 PM

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.

91
7/17/2015 3:05:42 PM

``````(4+3)*(4*2) == 56
``````

Note that PHP doesn't really support "nested functions", as in defined only in the scope of the parent function. All functions are defined globally. See the docs.