【问题标题】:Dynamic reference to an object-and-method combination in PHPPHP 中对对象和方法组合的动态引用
【发布时间】:2015-05-06 06:06:36
【问题描述】:

我知道如果我在 PHP 中有一个名为“foo”的函数,我可以通过以下方式动态调用它:

$var = "foo";
$var();

如果 foo 是名为“bar”的对象的方法,我可以如下动态调用它:

$var = "foo";
$bar->$var();

这里唯一的问题 --- 我不仅需要动态指定对象的方法 --- 而且我还需要动态指定对象本身 --- 并传递组合到将字符串约定用于动态函数的库。有没有办法做到这一点?

【问题讨论】:

  • 很简单,至少尝试一下

标签: php object dynamic-function


【解决方案1】:

与您对方法名称所做的非常相似,您可以指定类的名称并调用对象上的构造函数:

$objectVar = 'myObject';
$bar = new $objectVar();
$objectVar = 'newObject';
$newBar = new $objectVar();

这将为您提供 myObject 和 newObject 类中的每一个对象。

【讨论】:

    【解决方案2】:

    或者,如果你想指定对象而不是初始化一个新的,你可以使用

    $var = "objectName";
    $func = "functionName";
    $$var->$func();
    

    【讨论】:

    • 是的,我应该明确指出,感谢您澄清我的帖子(感谢您的支持,这是我的第一个公开评论!)
    • 这个建议的一个问题 ---- 我无法将它传递给期望提供的参数只是一个表示函数的字符串的库。为此,我必须在 one 字符串中指定整个对象/方法组合 --- 您的建议未提供。我需要将 _both 存储在一个名为 $func 的字符串中,该字符串可以称为:$func() --- 不是 $$func(),不是 $$fu->$nc() -- 但是作为$func(),不多也不少。
    • @Sophia_ES:我不知道你到底是什么意思,但你应该在变量中有完整的对象/函数名称。
    • @RichardReiber --- 也许我正在尝试做的一个例子可能会有所帮助。你能解释一下如何使用这个建议将当前对象的方法作为事件处理程序传递给 PHP Expat 吗?
    • 你有这个事件处理程序注册方法吗?
    猜你喜欢
    • 2012-09-09
    • 2014-10-17
    • 1970-01-01
    • 2012-03-24
    • 2011-07-15
    • 2012-08-04
    • 2018-08-18
    • 2014-08-26
    相关资源
    最近更新 更多