一尘不染

是否可以覆盖PHP中的函数

php

你能 声明这样 的函数吗?

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

然后像这样 重新声明 它…

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

这样可以覆盖函数吗?

可以吗


阅读 633

收藏
2020-05-26

共1个答案

一尘不染

编辑

解决此答案未直接解决原始问题的评论。如果您是通过Google搜索到达的,请从此处开始

有一个名为override_function的函数可以实际使用。但是,由于此函数是Advanced PHP
Debugger扩展的一部分,因此很难override_function()为生产使用提供参数。因此,我要说“否”,不可能以原始提问者的意图来覆盖函数。

原始答案

在这里,您应该利用OOP,特别是多态性。

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();
2020-05-26