lest assume that i have the following
function a(){
function b(){}
}
a(); //pass
a(); //error
why in the second call an exception is thr
It's exactly what is says, when you call a()
again it tries to redeclare b()
, declare b()
outside of a()
and call b()
from within a()
like so:
function a() {
b();
}
function b() {}
a();
a();
Declaring a function within another function like that would be considered bad practice in php. If you really need a function inside a() you should create a closure.
function a() {
$b = function() {
};
}
This is because when you execute function a
it declares function b. Executing it again it re-declares it. You can fix this by using function_exists
function.
function a(){
if(!function_exists('b')){
function b(){}
}
}
But what I suggest is, you should declare the function outside. NOT inside.
It's because you're calling a()
in a global scope. Add a function_exists call to make the above code work, but really there are few scenarios where you should really do something like this.
Named functions are always global in PHP. You will therefore need to check if function B has already been created:
function A() {
if (!function_exists('B')) {
function B() {}
}
B();
}
A different solution is to use an anonymous function (this will more likely fit your needs, as the function is now stored in a variable and therefore local to the function scope of A):
function A() {
$B = function() {};
$B();
}