我在做一个插件系统。我有一个类extensionmanager,它将插件的名称作为构造函数参数。长话短说,这就是我试图运行的代码:
$this->parsedata = function($data) {
$this->extension::parsedata($data);
};$this-extension是一个具有插件名称的字符串。我以本例中所示的精确方式运行了静态函数。现在我得到了第二行的错误unexpected T_PAAMAYIM_NEKUDOTAYIM (我听说它大致翻译成“意外的双冒号”)
有人能帮我理解原因吗?
在上面的示例之前,我尝试运行这样的程序
$this->parsedata = &$this->extension::parsedata;因此问题的标题。我认为最好的例子更接近于工作,所以我改变了它。
发布于 2011-02-28 19:27:26
功能可能会给你一个解决方案。在示例中的某个地方,您有以下代码:
<?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);发布于 2011-02-28 19:30:23
这样做:
$self = $this;
$this->parsedata = function($data) use ($self) {
{$self->extension}::parsedata($data);
};然而,我建议避免静态函数。毕竟,无论谁要使用您的扩展管理器,都需要符合某些接口。为什么不利用抽象方法或接口使用户符合您的界面呢?
https://stackoverflow.com/questions/5146545
复制相似问题