【发布时间】:2025-12-02 15:15:01
【问题描述】:
ASP.NET 中的静态变量今天让我措手不及。然后我吓坏了,因为这意味着要么我对 Web 世界中的静态变量有根本性的误解,要么 ASP.NET 的行为不像我想象的那样。
所以在 ASP.NET 中
public class MyClass {
public static bool myVar = true;
}
如果 ASPUserA 设置 MyClass.myVar = false 系统上的每个其他用户都会经历这些变化。因此,ASPUserB 将有 myVar = false。我的来源:http://www.foliotek.com/devblog/avoid-static-variables-in-asp-net/
class MyClassPHP {
public static $myVar = false;
}
如果 PHPUserA 设置了MyClass::$myVar = true,这是否意味着系统上的每个用户都会经历这些变化???
谢谢。
经过进一步研究,我这样做了;
class MyClassPHP {
public static $myVar = 0;
}
然后我让访问页面的用户这样做
MyClassPHP::$myVar++;
echo MyClassPHP::$myVar;
始终是 1。无论我刷新多少次或同时连接多少次... WOHHH 这是一个很棒的结论,否则我就完蛋了!!
ASP.NET 更新
经过进一步研究和测试,我发现了这一点。
public partial class MyPage : System.Web.UI.Page
{
public static int myInt = 0;
protected void Page_PreInit(object sender, EventArgs e)
myInt++;
}
}
然后我的页面可以显示myInt。
在浏览器(Firefox 和 chrome)之间,myInt 在我刷新页面时逐渐变高。因此,如果您的 class 是 static,这并不重要。仅当您有静态变量时才重要。它们的应用范围很广。
【问题讨论】:
-
哇! ASP.NET 真的做到了吗?那是愚蠢的=/
-
我很困惑。它有点把我的范式吹出了窗外!
-
感谢您说服我从不使用 ASP.NET ;-P
-
如果 myVar 在每个请求中都发生变化,您能解释一下为什么这里的 myVar 是静态的吗?
-
@Baz1nga:因为在PHP中一旦请求完成,脚本就完成了,PHP就不再运行了。