Php 有没有办法将类中的正则函数声明为方法?

Php 有没有办法将类中的正则函数声明为方法?,php,function,methods,Php,Function,Methods,我有一个场景,我试图合并几个人的PHP工作,其中一些是面向对象的,一些不是。我想将函数库文件拉入一个类中,并使这些函数对引用该类的其他文件可用。我知道我可以直接调用库函数,但随后我必须更新所有依赖文件,以便执行同样的操作。例如: class do_something { function test_state() { ... } if ($this->test_state($var)) { ... } } 其中test_state()与库文件中相同的命名

我有一个场景,我试图合并几个人的PHP工作,其中一些是面向对象的,一些不是。我想将函数库文件拉入一个类中,并使这些函数对引用该类的其他文件可用。我知道我可以直接调用库函数,但随后我必须更新所有依赖文件,以便执行同样的操作。例如:

class do_something {
  function test_state() {
    ...
  }

  if ($this->test_state($var)) {
    ...
  }
}
其中test_state()与库文件中相同的命名函数相同,这使得冗余代码保持同步。可更改为:

class do_something {
  if (test_state($var)) {
    ...
  }
}
但是这就产生了前面提到的问题,$this->test_state()对于依赖于类的文件不可用。我希望能够做到的是:

class do_something {
  public function test_state() = test_state();

  if ($this->test_state($var)) {
    ...
  }
}

显然,这是一个非常粗糙和不正确的例子,我正在尝试做什么。。。OOP中是否有任何方法可以进行这种重新分配,使类中的函数名与方法名相同?

您可以创建基本实用程序类,然后扩展它。有关详细信息,请参见PHP的手动输入。我并不是说这是针对您的具体情况的最佳解决方案,但我认为它回答了您试图解决的问题。

您可以使用一种变通方法来模拟这种情况。事实上,您通常希望这种方法将闭包附加到PHP中的对象上。它利用PHP中的magic
\u call
方法将方法调用重定向到普通函数(注意:没有可用的$this)

然后,您可以通过简单的赋值“注册”想要允许的函数(或闭包):

 $do_something->function_name = "global_function_name";
 $do_something->or_even = array("other_class", "method");

但同样,这并不能使它们成为正确的方法。

您所要求的是不可能直接实现的,但可以通过一个快速(可怕)的黑客来伪造:


祝你重构好运

因此,您希望采用不好的/无组织的代码,并对其进行半重构,以使其满足您的需要。当下一个“你”出现并且必须处理它时会发生什么?最好花点时间把它做好。好吧,当你这么说的时候。。。实际上,我只能控制代码的一部分,所以我的选择是有限的。+1这是一个很好的通用方法,比我描述的每个函数方法的新方法更容易管理。你可以考虑将函数定义放在一个私有的$$Lyapunov方法数组中,以将它们与真正的类成员变量隔离开来。这看起来是最干净的方法,但是如果我不能使用$$,它就不能真正解决对我没有完全控制的依赖文件进行修改的问题。在类中使用$this来访问这些函数。假设我正确理解了这个问题,这将满足您的需要。您可以使用
$this->bound_function()
调用它们。但是绑定函数不在对象范围内运行,因此无法访问
$this->
属性本身。它们仍然是普通的外部函数。这并不漂亮,但可能会奏效。我只需要引入一些函数。“重构”。。。在寻找答案时,知道这一点会很有用!
 $do_something->function_name = "global_function_name";
 $do_something->or_even = array("other_class", "method");
class do_something {
  public function test_state($param) {
    return test_state($param);
  }

...

  $this->test_state($param);
...

}