Roch
Roch

Reputation: 22041

PHP - Function inside a Function. Good or bad?

I would like to know if it is a good thing to define a function inside another function in PHP. Isn't it better to define it before the function (and not inside) in terms of performances.

Upvotes: 19

Views: 14884

Answers (4)

soulmerge
soulmerge

Reputation: 75704

There are multiple reasons against it:

  • The documentation of the inner function will not be parsed.
  • The inner function only exists after the outer function has been called (but even outside the scope of the outer function afterwards)
  • It is hard to read (because it is not seen commonly)
  • The only advantage I could think of is defining a callback, but this is better done with create_function() (<PHP 5.3) or closures (>=PHP5.3)
  • If you're concerned about performance on this level, you should really be using another language

Upvotes: 13

rogeriopvl
rogeriopvl

Reputation: 54056

That's a bad practice. Not only all weird things can happen and you'll lose too much time trying to debug it, but also the code becomes more confusing.

In terms of performance I'm not completely sure about it. All I know is that if you define a function inside another, that last function will only exist if the outer one is called. That may relief some memory. But I believe the payoff is not significant.

A very common way is to define the function outside of that function and call it inside.

Upvotes: 7

null
null

Reputation: 7594

It depends on the situation, as it may be more desirable than using create_function(). However you should know that the function which is created within the function is global in scope.

function creator() {

    function inside() {

        echo "hi.";
    }
}

creator();
inside();

This will print "hi." even though the inside() function was created "inside" of the creator function. So if you have a function in a loop which is creating a function, you need to check to see if the function exists, otherwise it will cause a function exists error after the first loop.

Upvotes: 7

Pascal MARTIN
Pascal MARTIN

Reputation: 400952

I think you should care more about maintenability, and less about performance, especially in that kind of situation, where the difference in performances is probably not that big between the two solutions, while the difference in maintenability seems important.

Like Donald Knuth said :

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.

This is quite true, in this situation ;-)

Upvotes: 24

Related Questions