【问题标题】:PHP - why global variables are evilPHP - 为什么全局变量是邪恶的
【发布时间】:2018-01-06 06:08:41
【问题描述】:

我知道这已经在这里讨论过多次,但我想进一步清楚地理解为什么使用全局变量是不好的做法。并发http请求会变得危险吗?如果这是代码:

<?php
    $variable1 = $_REQUEST['userinput'];
    sleep(3000);
    echo $variable1;
?>

如果有像 user1, user2.. 这样的用户,如果 user1 的输入是 'request1' 而 user2 的输入是 'request2' 并传递给 $_REQUEST['userinput'] 变量,那么并发发送请求时,是否会回显$variable1 显示为各个用户在其浏览器中输入的内容,或者它将通过最后一个用户的输入覆盖第一个用户的输入?为我写得不好的帖子和这个反复的询问道歉。我只是想对全局变量有一个清晰的认识。

【问题讨论】:

  • 您的 PHP 应用程序只存在一个请求。在每个请求上,整个代码(您为该请求 url 使用/包含的代码)运行,并在响应时清理并关闭。这意味着您不会有跨请求存在的变量或可能污染其他用户请求的变量。当然,有人认为他们需要一些存储状态,因此会话系统为您提供了一种自动方式来处理分配 cookie 以从(服务器端)存储中获取正确的会话数组数据。但是普通变量会在请求结束后被清除

标签: php variables concurrency request global


【解决方案1】:

全局变量可以被当前堆栈中运行的任何 php 访问和更改。有时是由您没有编写的其他脚本编写的,它们是框架的一部分或加载的代码库。

当可以在许多文件中修改值时,调试代码非常困难。

在一个简单的并发请求示例中并不明显,这些请求都在不同的内存堆栈中运行,它在整个系统中,全局变量可能变得不可预测。

【讨论】:

    【解决方案2】:

    我回答这个问题:

    回显的 $variable1 是否会显示为各个用户在其浏览器中输入的内容,还是会用最后一个用户的输入覆盖第一个用户的输入?

    回显的 $variable1 将显示为相应用户在其浏览器中输入的内容。

    PHP 为每个请求创建线程,因此不同的请求有不同的变量(包括全局变量)。

    我查看this post。

    正如 JasonB 所说, PHP 全局变量的范围很广,代码复杂。

    【讨论】:

    • 这是我正在寻找的答案。谢谢@Yuta Kawabe :)
    猜你喜欢
    • 2013-10-10
    • 2011-10-24
    • 2010-10-01
    • 2010-09-16
    • 2013-11-16
    • 2010-11-22
    相关资源
    最近更新 更多