我有一个场景,我正在尝试合并几个人的PHP工作,其中一些是OOP而另一些则不是。我想将函数的库文件拉到一个类中,并使这些函数可用于引用该类的其他文件。我知道我可以直接调用库函数,但是我必须更新所有相关文件来做同样的事情。例如:
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中是否有任何方式进行这种重新分配,使得该方法与该类中可用的函数同名?
答案 0 :(得分:2)
您可以使用变通方法来模拟此问题。实际上,您经常希望这种方法可以在PHP中将对象关闭到对象上。它利用PHP中的魔术__call
方法将方法调用重定向到普通函数(注意:没有$这个可用)。
class do_something {
function __call($func, $args) {
if (isset($this->$func) && is_callable($this->$func)) {
return call_user_func_array($this->$func, $args);
}
}
}
然后,您可以使用简单的赋值“注册”要允许(或关闭)的函数:
$do_something->function_name = "global_function_name";
$do_something->or_even = array("other_class", "method");
但同样,这并没有使它们成为正确的方法。
答案 1 :(得分:0)
您将创建基础实用程序类,然后extend
。有关详细信息,请参阅PHP的inheritance手册条目。我不是说这是你确切情况的最佳解决方案,但我认为它回答了你想要解决的问题。
答案 2 :(得分:0)
你所要求的是不可能的直接,但可以用快速(可怕的)黑客伪造:
class do_something {
public function test_state($param) {
return test_state($param);
}
...
$this->test_state($param);
...
}
祝你重构好运!