如何在PHP中获取Object的对象

时间:2014-01-20 17:41:52

标签: php oop object

我在PHP中遇到了一些面向对象编程的麻烦。

我基本上在一个类中有一个函数,它显示一些文本:

  public function text() {
       echo 'text';
    }

现在我想将函数名存储在arra中,所以我稍后可以引用它:

$functions = array('text_func' => 'text');

在另一个函数中,我想用Array引用调用上面的函数,所以我做了以下内容:

public function display() {
   $this->functions['text_func']();
}

结果基本上是:

text();

我的问题是,如何才能运行此功能? (它应该是正确的方式:$this->text())。但是我不能做这样的事情,因为它给了我一个错误:

$this->$this->functions['text_func']();

我的问题的任何想法或解决方案?

4 个答案:

答案 0 :(得分:1)

您小心忽略的错误消息可能会警告您$this无法转换为字符串。这为你提供了很好的线索。

(很长的答案是方法名称是字符串。由于PHP是松散类型的,当它需要一个字符串时,它会尝试将你提供的任何内容转换为字符串。你的类缺少__toString()方法,因此错误。)

你可能想要这个:

$this->{$this->functions['text_func']}();
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

答案 1 :(得分:0)

以下是来自PHP.net的示例应该有所帮助:

<?php
class Foo
{
    function Variable()
    {
        $name = 'Bar';
        $this->$name(); // This calls the Bar() method
    }

    function Bar()
    {
        echo "This is Bar";
    }
}

$foo = new Foo();
$funcname = "Variable";
$foo->$funcname();  // This calls $foo->Variable()

?>

来源:http://www.php.net/manual/en/functions.variable-functions.php

答案 2 :(得分:0)

你很困惑很多事情。首先,您可以使用magic constants __METHOD____CLASS__来确定您当前正在执行代码的类类型和方法。

其次,PHP is defined as中的callable是带有对象实例的array或索引为0的静态类引用,以及索引为1的方法名称,或者自PHP 5.2以来完全限定的字符串,例如MyClass::myFunction。您只能动态调用存储为这些类型之一的函数。在函数之间传递时,可以使用类型提示callable

答案 3 :(得分:0)

$这不包含自身的引用,所以你应该尝试

$this->display();

而不是

$this->$this->functions['text_func']();  // WRONG