我如何参考PHP函数?

时间:2011-02-28 19:22:37

标签: php function static

我正在制作一个插件系统。我有一个类extensionmanager,它将插件的名称作为构造函数参数。长话短说,这是我试图运行的代码:

$this->parsedata = function($data) { 
    $this->extension::parsedata($data); 
};

$this-extension是一个包含插件名称的字符串。我之前以这个例子中显示的确切方式运行静态函数。现在我在第二行收到错误unexpected T_PAAMAYIM_NEKUDOTAYIM(我听说它大致翻译为“意外的双冒号”)

有人能帮助我理解为什么吗?


在上面的例子之前,我尝试运行类似这样的东西

$this->parsedata = &$this->extension::parsedata;

因此问题标题。我认为最好的例子更接近于工作,所以我改变了它。

2 个答案:

答案 0 :(得分:3)

call_user_func可能会为您提供解决方案。在示例中的某处,您有以下代码:

<?php

namespace Foobar;

class Foo {
    static public function test() {
        print "Hello world!\n";
    }
}

call_user_func(__NAMESPACE__ .'\Foo::test'); // As of PHP 5.3.0
call_user_func(array(__NAMESPACE__ .'\Foo', 'test')); // As of PHP 5.3.0

?>

我认为你可以很容易地调整它来调用你的静态函数。例如:

call_user_func(array($this->extension, 'parseData'), $data);

答案 1 :(得分:3)

那样做:

$self = $this;
$this->parsedata = function($data) use ($self) { 
    {$self->extension}::parsedata($data); 
};

然而,我建议避免使用静态函数。毕竟,谁将要使用您的扩展管理器将需要符合某些界面。为什么不利用抽象方法或接口来使用户符合您的界面呢?