PHP在返回语句

时间:2015-11-04 18:34:47

标签: php

这可以实现吗?如果没有,其他方式最佳做法是什么?

我试图:

  1. 成功函数调用之后返回 true
  2. 在返回语句后,让被调用的函数执行甚至
  3. 让事情更清楚:

    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!

2 个答案:

答案 0 :(得分:2)

您正在寻找的是“异步”处理。这种东西存在于某些语言中,特别是javascript,但在php中本身不存在。有一些扩展,但它们并没有真正普及,因为这有点违背了php的想法和力量。

通常使用两种替代方法,其中第二种方法是更好的方法:

  1. 您向客户端发送正常回复并使用phps ignore_client_abort功能。该功能允许在发送响应后继续处理。但请注意,以这种同步方式处理更多数据是值得怀疑的:出于安全原因,您很可能会遇到许多php限制中的一些。因此,yu必须提高所有这些限制,这会降低您对未使用和错误的保护。

  2. 使用作业调度程序存储数据处理作业,并通知客户端您收到数据并创建处理作业的事实。然后通过cronjob或类似方法逐个处理队列中的每个作业,这与客户端请求无关。如果在客户端的队列状态上实现视图,则会获得额外的分数: - )

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

答案 1 :(得分:1)

如果要同时运行更多功能,PHP支持多线程。这是一个简单而又很好的例子:How can one use multi threading in PHP applications

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