首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何引用PHP函数?

如何引用PHP函数?
EN

Stack Overflow用户
提问于 2011-02-28 19:22:37
回答 2查看 82关注 0票数 0

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

代码语言:javascript
复制
$this->parsedata = function($data) { 
    $this->extension::parsedata($data); 
};

$this-extension是一个具有插件名称的字符串。我以本例中所示的精确方式运行了静态函数。现在我得到了第二行的错误unexpected T_PAAMAYIM_NEKUDOTAYIM (我听说它大致翻译成“意外的双冒号”)

有人能帮我理解原因吗?

在上面的示例之前,我尝试运行这样的程序

代码语言:javascript
复制
$this->parsedata = &$this->extension::parsedata;

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-28 19:27:26

功能可能会给你一个解决方案。在示例中的某个地方,您有以下代码:

代码语言:javascript
复制
<?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

?>

我认为您可以很容易地将其调整为调用静态函数。例如:

代码语言:javascript
复制
call_user_func(array($this->extension, 'parseData'), $data);
票数 3
EN

Stack Overflow用户

发布于 2011-02-28 19:30:23

这样做:

代码语言:javascript
复制
$self = $this;
$this->parsedata = function($data) use ($self) { 
    {$self->extension}::parsedata($data); 
};

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5146545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档