PHP线性处理 - 脚本在继续之前等待对象完成

时间:2014-03-14 00:26:14

标签: php

这可能是一个菜鸟问题,请考虑以下脚本,简而言之,对应于我的真实代码:

---------------- class -------------

  <?php


    class BaseClass {

        public $flag;

        function __construct() {

            $this->flag = 0;

        }

        function mainMethod() {

            sleep(3);

            $this->flag = 1;

        }



        function getFlag() {

        return $this->flag;

        }


    }

  ?>

---------------创建新实例-------------

<?php

require_once('test_class.php');

$test = new BaseClass;
$test -> mainMethod();

while($test -> getFlag() != 1) {

    usleep(1000000); // 1sec.

    echo "waiting";
}

?>

当实例化上述类时,构造函数将 $ flag 设置为 0 。然后调用 mainMethod(),它会休眠3秒。然后将 $ flag 设置为 1 。程序&#34; while&#34;循环下面检查 $ flag 值。理想情况下,它应该返回字符串&#34;等待&#34; 3次才允许脚本完成,但它不会。代码是线性执行的,&#34; while&#34; 循环永远不会在 mainMethod()完成其休眠时间之前执行(因此永远不会回复&#34;等待&#34;。)

也许我认为我可以使用 pcntl_fork()将调用拆分为2个不同的进程,但是此代码在Win 2008上运行。是否有一种简单的方法可以使&#34;在处理 mainMethod()时,&#34; 循环工作(异步)?

谢谢。

1 个答案:

答案 0 :(得分:0)

假设这是在网络服务器/浏览器中使用,我建议你重新设计:

  • 运行一个执行实际工作的请求
  • 通过AJAX运行来自浏览器的轮询请求
  • 通过会话结合这两个人