从另一个类非静态地调用一个类和方法

尼科特

我试图从另一个类的PHP实例化一个类,并调用所述类的方法,但是无论我做什么,我都会收到错误。

为什么不能进行以下工作:

class Example {
    public function sayHi () {
        echo "hi";
    }
}

class Caller {
    private $_controller,
            $_action;

    public function __construct ($cont, $action) {
        $this->_controller = $cont;
        $this->_action = $action;
    }

    public function __toString() {
        return (string)$this->_action;
    }

    public function run () {
        $controller = new $this->_controller;
        if (is_callable(array($controller, $this->_action))) {
            $controller->$this->_action;
        }
    }
}

$caller = new Caller ('Example', 'sayHi');
$caller->run();

更改方法时,请执行以下工作?

public function run () {
    $controller = new $this->_controller;
    if (is_callable(array($controller, $this->_action))) {
        call_user_func(array($this->_controller, $this->_action));
    }
}

我不想要call_user_func的原因是因为它静态地调用了控制器。

删除魔术方法__toString给我:

Catchable fatal error: Object of class Caller could not be converted to string

再次添加将为我提供以下内容:

Undefined property: Example::$sayHi (same line, on method run() from Caller)
Trying to get property of non-object (same line, on method run() from Caller)
大能力

您部分正确。如果仅将类名和函数传递给call_user_func它,则它将静态调用它。但是,如果将实例传递给它,它将在该实例内调用它。那就是可调用的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从另一个类非静态地调用一个类和方法

来自分类Dev

一个非静态类如何调用另一个非静态类的方法?

来自分类Dev

从另一个Java类调用静态方法

来自分类Dev

PHP:获取调用另一个静态类的静态方法的类名

来自分类Dev

PHP:是否可以从另一个静态类调用静态类方法?

来自分类Dev

从另一个类调用静态数组

来自分类Dev

为什么不从另一个类中调用一个类的静态方法“ main”?

来自分类Dev

静态引用另一个类中的非静态方法

来自分类Dev

另一个类中的静态方法

来自分类Dev

另一个类中的静态方法

来自分类Dev

coffeescript类-调用从另一个调用一个类方法

来自分类Dev

从Python 2.7中的另一个类方法调用一个类方法

来自分类Dev

如何从另一个类方法调用一个类方法

来自分类Dev

如何从另一个类中迅速调用另一个方法?

来自分类Dev

从另一个类(或文件)调用一个类实例的方法

来自分类Dev

如何在另一个类中调用一个类的main()方法?

来自分类Dev

使用main方法从另一个类调用一个类

来自分类Dev

从另一个类中的一个类调用方法

来自分类Dev

如何从一个类调用方法到另一个类

来自分类Dev

如何从一个类到另一个类调用方法

来自分类Dev

从另一个类中的一个类调用方法

来自分类Dev

在另一个类库中调用静态方法

来自分类Dev

为什么我不能在另一个类中调用静态方法?

来自分类Dev

模拟另一个类方法的内部调用

来自分类Dev

无法从另一个类调用接口方法

来自分类Dev

从另一个类调用方法

来自分类Dev

从Python的另一个类内部调用方法

来自分类Dev

从另一个类调用paint()方法?

来自分类Dev

从另一个类调用getter方法

Related 相关文章

热门标签

归档