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

时间:2013-11-18 05:36:32

标签: php oop

作为尝试在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中没有任何运气。

1 个答案:

答案 0 :(得分:1)

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

$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));
    }
 }