【问题标题】:How do I invoke the function named in a static property on an object?如何调用对象的静态属性中命名的函数?
【发布时间】:2011-07-29 00:59:03
【问题描述】:

我想在一个对象上调用一个函数。函数的名称存储在类的静态属性中(对象是一个实例)。此调用发生在对象的方法之一内。

以下方法均无效(在getBean()-> 之后我感到困惑)。

$this->getBean()->User::$BEANSCHEMA_FIRST_NAME;

$this->getBean()->self::$BEANSCHEMA_FIRST_NAME;

$this->getBean()->$self::$BEANSCHEMA_FIRST_NAME;

我怎样才能做到这一点,最好没有像call_user_func()这样的奇怪库函数?

【问题讨论】:

  • 通话必须在一条线上吗?
  • 尝试使用 () : $this->getBean()->(User::$BEANSCHEMA_FIRST_NAME);
  • @tandu 调用没有必须在一行,但越简洁越好。 PS - 这行得通,但我不在乎:$bob = self::$BEANSCHEMA_LAST_NAME; $this->getBean()->$bob;
  • @hadvig 使用这种方法,我在最后一个 ( 上遇到语法错误。

标签: php static static-methods


【解决方案1】:

使用{},希望对您有所帮助(Demo):

class Funcaro
{
    public static $MUNKI_SELF = 'munki';
    public function munki()
    {
        echo 'You got me :)', "\n";
    }
}

class Callara extends Funcaro
{

    public function get()
    {
        return new Funcaro();
    }
    public function call()
    {
        $this->get()->{self::$MUNKI_SELF}();
    }
}

$c = new Callara();

$c->get()->munki();

$munki = 'munki';

$c->get()->$munki();

$c->get()->{Funcaro::$MUNKI_SELF}();

$c->call();

相关:PHP curly brace syntax for member variable

【讨论】:

  • 该死,我只试过括号。应该考虑尝试卷发。谢谢!
  • @cheeken:不客气。一个简单的例子也总是有帮助的 :) - 花括号可用于指示 PHP 要将表达式的哪一部分用作函数标签。也适用于变量名和属性名。
  • @hakre:这是一个很好的例子,但我不明白为什么 Callara 类有一个 get() 方法,它本质上是一个用于实例化并返回 Funcaro 对象的工厂,即同一个班级的父母。这对我来说似乎违反直觉,因为我们已经有一个可以访问父属性的对象,所以您可以简单地进行如下调用:$c->{Funcaro::$MUNKI_SELF}();
  • @MikePurcell:从技术上讲,没有必要调用一个函数,但是如果你看这个问题,我想我是这么写的,因为它更接近问题中给出的场景(getBean()) .
  • 明白。总是有多种方法可以给猫剥皮。 +1 就是一个很好的例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
相关资源
最近更新 更多