PHP返回语句后继续执行函数


PHP Continue function execution after return statement

这能实现吗?如果没有,还有哪些方法可以做到最好?

我正在努力:

  1. 成功调用函数后,返回true
  2. 让被调用的函数在返回语句后仍然执行,甚至

让事情变得更清楚:

function foo() {
  var $data; // a very large data
  var $check = $this->bar($data); // gets true
  if ($check) {
    echo "FOO: Bar received my message!";
  }
}
function bar($data) {
  return true; // returns true, now foo doesn't care what bar will do
  echo "BAR: returned true to foo, will now call foobar!";
  // some code to process $data
  $this->foobar(); // but hopefully still execute this line
}
function foobar() {
  echo "FOOBAR: Hello, World!";
  return;
}

预期输出:(异步

FOO: Bar received my message!

BAR: returned true to foo, will now call foobar!

FOOBAR: Hello, World!

您要查找的内容称为"异步";处理。这种东西存在于某些语言中,尤其是javascript,但并不存在于php中。有一些扩展,但它们并没有真正普及,因为这有点违背php的思想和优势。

通常使用两种替代方法,其中第二种选择是迄今为止更好的一种:

  1. 您向客户端发送一个正常的响应,并使用phps的ignore_client_abort功能。该功能允许即使在发送了响应之后也可以继续处理。然而,请注意,以这种同步方式处理大量数据是有问题的:出于安全原因,您很可能会遇到许多php限制中的一些限制。所以yu必须提高所有这些限制,这会降低你对误用和bug的保护。

  2. 您可以使用作业调度程序来存储数据处理作业,并通知客户端您已接收到数据并创建了处理作业。然后,您可以通过cronjob或类似的方法逐一处理队列中的每个作业,从而独立于客户端请求。如果您为客户端实现队列状态视图,您将获得额外的分数:-)

    有这样的框架,基本上它们所做的是在数据库中创建条目,每个作业一个条目。然后,您会定期(每分钟)触发一个cron作业。该作业检查另一个作业是否已经在处理中,如果没有,则选择下一个作业并开始处理。通常,处理是根据php-cli调用独立于web服务器环境进行的。这也意味着您甚至可以在不同的系统上执行作业,以获得更好的性能。您已经将处理与web gui解耦。

如果你想同时运行更多的函数,PHP支持多线程。下面是一个简单但很好的例子:如何在PHP应用程序中使用多线程

另请参阅http://php.net/manual/en/class.thread.php