<?php
// 实例1
class test{
public function run($index)
{
echo 'start:'.$index."<br />";
sleep(3);
echo 'end:'.$index."<br />";
}
}$test = new test();
$test->run(1);
$test->run(2);这个输出是
start:1
end:1
start:2
end:2怎么才能让他们输出
start:1
start:2
end:1
end:2求求你们帮帮忙 帮帮我解决一下
// 实例1
class test{
public function run($index)
{
echo 'start:'.$index."<br />";
sleep(3);
echo 'end:'.$index."<br />";
}
}$test = new test();
$test->run(1);
$test->run(2);这个输出是
start:1
end:1
start:2
end:2怎么才能让他们输出
start:1
start:2
end:1
end:2求求你们帮帮忙 帮帮我解决一下
线程在何时运行是由操作系统调度的,你不可能预知运行的顺序
1,利用__deconstruct()函数,在对象销毁时,依次执行任务。
2,利用中间件原理。
3,将任务存入存储介质,如文件,redis等,再开一个程序监听异步执行存储介质里的任务。
这里我用前两种实现一下吧。interface Event{
public function handle();
}class Job implements Event{
public $param;
public function __construct($param){
$this->param = $param;
}
public function handle(){
echo 'end:'.$this->param."<br />";
}
}class Test{
public static $jobs=[]; public function run(Event $job){
static::$jobs[] = $job;
echo 'start:'.$job->param."<br />";
} public function __destruct(){
foreach (static::$jobs as $job) {
$job->handle();
}
}}$test = new Test;$test->run( new Job(1) );
$test->run( new Job(2) );interface Event{
public function handle(Closure $next);
}class Job implements Event{
public $param;
public function __construct($param){
$this->param = $param;
}
public function handle(Closure $next){
echo 'start:'.$this->param."<br />";
$next();
} public function boot(){
echo 'end:'.$this->param."<br />";
}
}class Test{
public $jobs=[]; public function __construct(array $arr){
foreach ($arr as $v) {
$this->jobs[] = new Job($v);
}
} public function run(){
$pipes=array_reverse($this->jobs);
$firstSlice=function(){
foreach ($this->jobs as $job) {
echo $job->boot();
}
}; call_user_func(
array_reduce($pipes,$this->getSlice(),$firstSlice)
);
} function getSlice(){
return function ($stack,$pipe){
return function () use ($stack,$pipe){
return $pipe->handle($stack);
};
};
}}$arr = [1,2];
$test = new Test($arr);
$test->run( );
public static $jobs=[]; public function add($index){
static::$jobs[] = $index;
echo 'start:'.$index."<br />";
} public function run(){
foreach (static::$jobs as $index) {
echo 'end:'.$index."<br />";
}
}}$test = new Test;$test->add(1);
$test->add(2);
$test->run();