ASP.NET中的静态变量让我措手不及。然后我变得吓坏了,因为这意味着要么我对网络世界中的静态变量有一个基本的误解,要么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
,则无关紧要。只有你有静态变量才有意义。它们适用于整个应用范围。
答案 0 :(得分:7)
在IIS中运行时:
静态变量不是特定于“页面”的。它具体是“AppDomain”。与“页面”的唯一关系是变量的路径(可以这么说)(例如MyProject.MyPage.MyVariable)。由于应用程序的所有用户都在相同的AppDomain(即相同的IIS应用程序文件夹)中运行,因此它们都将使用相同的静态变量。所以......最终你的用户将会看到彼此的信息,因为他们都在共享一个静态变量。
然而,PHP跟踪静态PER USER INSTANCE,所以我猜你可以称它们“更安全地从单身危险区域”。答案 1 :(得分:0)
不,PHP并不像ASP.NET那样愚蠢(它是否认真做到了?)。 PHP中的静态变量是每个实例(它不像ASP.NET,整个页面是一个实例,每个用户都有自己的PHP实例)。
如果2个用户访问PHP页面,并且在一个页面MyClass::$myVar = true
上运行,则不会影响其他用户。