PHP - 通过引用传递/存储对象实例方法


PHP - Passing/storing object instance methods by reference?

作为尝试在OOP方面做得更好的一部分,我想实现一个任务队列对象,它可以构建任务列表并执行它们。 我用PHP写作,因为我所做的大部分工作都必须用这种语言,这是在我试图构建的一个非常基本的Web框架的背景下。

简单来说,任务将由一个函数、一个变量数组、一个表示任务已完成的布尔值组成。

有没有办法以一种我可以将其存储在列表中然后稍后执行的方式传递对象的函数? 理想情况下,我想要这样的东西:

$tasks->register($log->outputAllEntries, $logLevel);
$tasks->register($database->remove, $someRecord);
$tasks->register($log->toHTML, null);

然后后来

$tasks->run();

然后,任务中的 run 方法将运行:

$log->outputAllEntries($logLevel);
$database->remove($someRecord);
$log->toHTML();

我无法弄清楚如何存储对我要运行的函数的引用......在PHP中有什么方法可以做到这一点吗? 还是我以一种愚蠢的方式思考问题? 这在Javascript中似乎很容易做到,但我在PHP中没有任何运气。

有几种方法可以实现这一点。 一个简单的方法是,而不是:

$tasks->register($log->outputAllEntries, $logLevel);

你会做的

$tasks->register($log, 'outputAllEntries', array($logLevel));

对于您的函数,您将拥有:

function register($class, $method, $params) {
    $this->tasks[] = array($class, $method, $params);
}
function run() {
    foreach($this->tasks as $task) {
        list($class, $method, $params) = $task;
        call_user_func_array(array($class, $method), array($params));
    }
 }