为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
,但我不知道如何在这种情况下使用它。任何帮助都是非常好的。我只能猜测你到底想做什么,但是如果你想隐式地调用代码而不显式地编写调用,你可能在寻找类似面向方面编程的东西:我同意这比我的答案更好。