使用协程模式:


<?php
/*********观察者模式FUNC版*******/
use functionSwoole\Coroutine\run;
use functionSwoole\Coroutine\go;
useSwoole\Coroutine\System;

$user  = [
   'name'=>'',
   'email'=>'',
   'mobile'=>'',
   'updates'=> [],
   'OnUpdate'=>function($update)use(&$user) {
       array_push($user['updates'],$update);
   },
   'Update'=>function()use(&$user) {
       foreach($user['updates']as$update){
           go(function()use($update,&$user){
               $update($user);
               System::sleep(3);
           });
       };
//            sleep(5);
   },
   'Register'=>function($name,$email,$mobile)use(&$user) {
       $user['name'] =$name;
       $user['email'] =$email;
       $user['mobile'] =$mobile;
       $user['Update']();
   },
];
$user["OnUpdate"](function($subject){
   echo"send email to ".$subject['email'] .PHP_EOL;
});
$user["OnUpdate"](function($subject){
   echo"send sms to ".$subject['mobile'] .PHP_EOL;
});
$user['Register']("紫羽·大薯","345374113@qq.com","1888888888");
echo"我先提前完成输出";
\Swoole\Event::wait();