如何引用PHP函数?

如何引用PHP函数?,php,function,static,Php,Function,Static,我正在做一个插件系统。我有一个类extensionmanager,它将插件的名称作为构造函数参数。长话短说,这是我试图运行的代码: $this->parsedata = function($data) { $this->extension::parsedata($data); }; $this extension是一个带有插件名称的字符串。我以前以本例中所示的方式运行过静态函数。现在我在第二行得到了错误意外的T_PAAMAYIM_NEKUDOTAYIM(我听说它大致翻译

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

$this->parsedata = function($data) { 
    $this->extension::parsedata($data); 
};
$this extension
是一个带有插件名称的字符串。我以前以本例中所示的方式运行过静态函数。现在我在第二行得到了错误
意外的T_PAAMAYIM_NEKUDOTAYIM
(我听说它大致翻译为“意外的双冒号”)

有人能帮我理解为什么吗


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

$this->parsedata = &$this->extension::parsedata;
因此问题的标题。我认为最重要的例子更接近实际,因此我对其进行了更改。

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

<?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

?>
我可以给你一个解决办法。在示例的某个地方,您有以下代码:

<?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

?>
这样做:

$self = $this;
$this->parsedata = function($data) use ($self) { 
    {$self->extension}::parsedata($data); 
};
然而,我建议避免使用静态函数。毕竟,无论谁要使用您的扩展管理器,都需要遵守某些接口。为什么不利用抽象方法或界面让用户符合您的界面?

这样做:

$self = $this;
$this->parsedata = function($data) use ($self) { 
    {$self->extension}::parsedata($data); 
};
然而,我建议避免使用静态函数。毕竟,无论谁要使用您的扩展管理器,都需要遵守某些接口。为什么不利用抽象方法或接口让用户符合您的接口