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

时间:2014-12-12 12:53:31

标签: 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 something
    }

    public function c() {
        // do something
    }
}

我希望a()b()c()在这些小方法被称为时自动调用mySpecialMethod($method_name_string),而无需为每种方法手动调用 。它还应该接收方法名称作为参数。

这个概念对我来说非常抽象,我不确定这样的东西是否在PHP中是可行的。如果有的话,我会非常感谢你的答案。

2 个答案:

答案 0 :(得分:0)

以下是如何使用的详细示例:

<?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");

答案 1 :(得分:0)

我能想象的唯一方法就是将函数作为像

这样的函数的paremeter
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的那样直接运行函数。