PHP返回语句后继续执行函数
这是可以实现的吗?如果不是,其他方式做得最好的是什么?PHP返回语句后继续执行函数
我想:
- 返回真正一个成功函数调用后制成。
- 让返回声明后,被叫功能仍然执行甚至。
为了让事情更清晰:
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的想法和实力。
典型的两个备选方案的使用,其中第二个选项是迄今为止最好的一个:
您发送到客户端的正常反应,并使用PHPS
ignore_client_abort
功能。该功能允许在发送响应之后继续处理。但是请注意,以这种同步方式处理更多数据量是有问题的:为安全起见,您很可能会遇到许多php限制。因此,宇必须提高所有这些限制,这会降低您对错过使用和错误的保护。-
您使用作业调度程序来存储数据处理作业,并通知客户有关您已收到数据并创建处理作业的事实。然后,您通过cronjob或类似的方式逐个处理队列中的每个作业,从而独立于客户端请求。如果实现对客户端的队列状态的视图:-)
有这样的事情,你的框架获得加分,基本上他们做的是在数据库中,一个为每个作业中创建条目。然后定期(每分钟)发一个cron作业。该作业检查是否有其他作业已经处理完毕,如果没有,则选择下一个作业并开始处理。通常,处理是通过php-cli调用完成的,以独立于Web服务器环境。这也意味着您甚至可以在不同系统上执行作业以获得更好的性能。你已经从web gui中分离了处理过程。
如果你想同时运行更多的功能,PHP支持多线程。这里是什么可以做一个简单但很好的例子:How can one use multi threading in PHP applications
而且,看到
你可以尝试与派生的东西,但我看不出有什么好处...这个我 –
正在想你应该嵌套多个功能。为每个值返回一个函数。容器函数将返回从里面函数返回的所有值的集合。但是,这不是一个很好的方法,你可能会重新思考你的逻辑来获得一个单一的代码来完成所有的工作 –
你正在寻找什么叫做“异步”处理。这样的东西存在于某些语言中,特别是JavaScript,但本身并不在PHP中。有一些扩展,但不是很普遍。为了提出一种替代方法(当然确实存在),你必须解释你想要做什么。所以不是_how_你可能会这样做,但是什么和为什么。 – arkascha