1. ホーム
  2. php

PHPで関数を上書きすることは可能ですか?

2023-08-13 19:07:15

質問

あなたは と宣言してください。 のような関数を宣言できますか?

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

そして を再宣言します。 とすると、なんとなくこんな感じになります。

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

そのように関数を上書きすることは可能でしょうか?

どんな方法ですか?

どのように解決するのですか?

編集

<ブロッククオート

この回答が元の質問に直接対処していないというコメントに対処するために 元の質問に直接触れていないというコメントに対処するためです。Google検索でここにたどり着いたのなら、ここから始めてください。

という関数が用意されています。 オーバーライド関数 と呼ばれる関数があり、実際にその条件に合っています。しかし、この関数が 高度な PHP デバッガ 拡張モジュールの一部であることを考えると、この関数が override_function() が実運用に使われることを意図しているとは言いがたいでしょう。したがって、私は"No"と言いたい、元の質問者が持っていた意図で関数を上書きすることは不可能であるということです。

オリジナルの回答

これは、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();