为PHP中的每个公共方法调用外部方法

为PHP中的每个公共方法调用外部方法,php,oop,methods,Php,Oop,Methods,让我们来上两门课: class Outer { public function mySpecialMethod($method_name_string) { // do something very complex } } class lotsOfMethods { public function a() { // do something } public function b() { // do so

让我们来上两门课:

class Outer {
    public function mySpecialMethod($method_name_string) {
        // do something very complex
    }
}

class lotsOfMethods {
    public function a() {
        // do something
    }

    public function b() {
        // do something
    }

    public function c() {
        // do something
    }
}
我希望
a()
b()
c()
在调用这些小方法时自动调用
mySpecialMethod($method\u name\u string)
,而无需为每个方法手动调用它。它还应该接收方法名作为参数


这个概念在我看来非常抽象,我不确定这样的东西在PHP中是否可行。如果有,我将非常感谢您的回答。

下面是一个关于如何使用的详细示例:

<?php

class Outer
{
    public function mySpecialMethod($method_name_string)
    {
        $a = new lotsOfMethods();
        $a->{$method_name_string}();
    }
}

class lotsOfMethods
{
    public function a()
    {
        echo 'a';
    }

    public function b()
    {
        echo 'b';
    }

    public function c()
    {
        echo 'c';
    }
}


$outer = new Outer();

$outer->mySpecialMethod("a");
$outer->mySpecialMethod("b");
$outer->mySpecialMethod("c");

我能想象的唯一方法是在函数中以参数形式给出函数,如

public function runFunction($method) {
    // always call the mySpecialMethod(method)
    // also add the method as parameter to myspecialmethod
    mySpecialMethod($method);

    //check what to do based on parameter
    switch ($method) {
    case "a":
       a();
      break;
    case "b":
      b();
      break;
    case "c":
      c();
      break;
  }
}


public function a() {
    // do something
}

public function b() {
    // do something
}

public function c() {
    // do something
}

如果您创建一个新函数,您应该将新函数添加到开关中,因此我不会重新编译它,而是将mySpecialMethod()添加到新函数中。唯一的好处是,您可以随时决定像()一样直接运行函数,而不使用mySpecialMethod。

一般来说:不,这是不可能的。具体来说,您可以使用
\uuu call
或某些包装器设计模式来做一些事情,但总体来说,还不清楚这里的目标是什么,以及为什么这是一个好主意。您说的是什么?这是“恶鬼”还是“穿越雷区”——你试图在这里编写的反模式?我完全相信我在这里所做的。我只需要一个问题的解决方案,我希望得到一个答案。@deceze我读了一些关于
\uu call
,但我不知道如何在这种情况下使用它。任何帮助都是非常好的。我只能猜测你到底想做什么,但是如果你想隐式地调用代码而不显式地编写调用,你可能在寻找类似面向方面编程的东西:我同意这比我的答案更好。