Search code examples
phpfunctionredeclaration

Is it possible to overwrite a function in PHP


Can you declare a function like this...

function ihatefooexamples(){
  return "boo-foo!";
};

And then redeclare it somewhat like this...

if ($_GET['foolevel'] == 10){
  function ihatefooexamples(){
    return "really boo-foo";
  };
};

Is it possible to overwrite a function that way?

Any way?


Solution

  • Edit

    To address comments that this answer doesn't directly address the original question. If you got here from a Google Search, start here

    There is a function available called override_function that actually fits the bill. However, given that this function is part of The Advanced PHP Debugger extension, it's hard to make an argument that override_function() is intended for production use. Therefore, I would say "No", it is not possible to overwrite a function with the intent that the original questioner had in mind.

    Original Answer

    This is where you should take advantage of OOP, specifically polymorphism.

    interface Fooable
    {
        public function ihatefooexamples();
    }
    
    class Foo implements Fooable
    {
        public function ihatefooexamples()
        {
            return "boo-foo!";
        }
    }
    
    class FooBar implements Fooable
    {
        public function ihatefooexamples()
        {
            return "really boo-foo";
        }
    }
    
    $foo = new Foo();
    
    if (10 == $_GET['foolevel']) {
        $foo = new FooBar();
    }
    
    echo $foo->ihatefooexamples();