2012-05-23 14 views
7

एएसपी.नेट में स्थिर चर ने आज मुझे गार्ड से पकड़ा। तब मैं बाहर निकला, क्योंकि इसका मतलब है कि या तो मुझे वेब की दुनिया में स्थिर चरों की मौलिक गलतफहमी है या एएसपी.नेट ऐसा नहीं करता है जैसा मैंने सोचा था।PHP बनाम एएसपी.नेट स्थिर चर

तो ASP.NET

public class MyClass { 
    public static bool myVar = true;  
} 

में ASPUserA सेट करता है MyClass.myVar = false सिस्टम पर हर दूसरे उपयोगकर्ता इन परिवर्तनों का अनुभव होगा। तो, एएसपीयूसर बी 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 प्रदर्शित कर सकता है।

ब्राउज़र (फ़ायरफ़ॉक्स और क्रोम) के बीच myInt प्रगतिशील रूप से अधिक था क्योंकि मैंने पृष्ठ को रीफ्रेश किया था। तो इससे कोई फर्क नहीं पड़ता कि आपका classstatic है। यह केवल तभी मायने रखता है जब आपके पास स्थिर चर होते हैं। वे आवेदन व्यापक हैं।

+2

वाह!क्या एएसपी.नेट वास्तव में ऐसा करता है? यह बेवकूफ =/ –

+2

मैं इससे उलझन में हूं। यह एक खिड़की से मेरे पैराडिगम्स उड़ा दिया! – Michael

+2

मुझे विश्वास करने के लिए धन्यवाद * कभी * एएसपी.NET का उपयोग करने के लिए नहीं ;- पी –

उत्तर

7

जब IIS में चल रहा है:

एक स्थिर चर "पेज" विशिष्ट नहीं है। यह "AppDomain" विशिष्ट है। "पृष्ठ" का एकमात्र संबंध वैरिएबल का पथ (इसलिए बोलने के लिए) होगा (उदाहरण के लिए MyProject.MyPage.MyVariable)। चूंकि आपके एप्लिकेशन के सभी उपयोगकर्ता एक ही ऐपडोमेन (यानी एक ही आईआईएस एप्लिकेशन फ़ोल्डर) में चल रहे हैं, तो वे सभी एक ही स्थिर चर का उपयोग करेंगे। तो ... अंततः आपके उपयोगकर्ता एक-दूसरे की जानकारी देखने जा रहे हैं क्योंकि वे सभी एक ही स्थैतिक चर साझा कर रहे हैं।

PHP हालांकि उपयोगकर्ता प्रति उपयोगकर्ता सांख्यिकी को ट्रैक करता है, इसलिए मुझे लगता है कि आप उन्हें "सिंगलटन खतरे से सुरक्षित" कह सकते हैं।

+1

अच्छा काम माइक्रोसॉफ्ट। =/ –

+3

मेरा मतलब यह नहीं है ... भयानक? आपको कुछ मामलों में इसके आसपास जाना होगा, लेकिन दूसरों के मेमोरी मैनेजमेंट की बात आती है। फिर आप एक ही वस्तु को एक ही वस्तु के 10 प्रतियों की बजाय एक ही वस्तु को करने के बजाय उपयोगकर्ताओं के एक समूह में एक ही कार्य कर सकते हैं। मुझे लगता है कि यह सिर्फ वरीयता का मामला है: डी –

+0

यह पुराना है, लेकिन यह वरीयता का मामला नहीं है, एक पृष्ठ एक से अधिक उपयोगकर्ता द्वारा accesed है, इसलिए, सामान्य behaivor PHP का एक होगा, एएसपी.Net नहीं। .. यह एक विंडोज़ फॉर्म नहीं है जो एकल उपयोगकर्ता है ... यह वास्तव में डेटाबेस को प्रबंधित करने के लिए सिंगलटन जैसे आपके प्रतिमानों को विस्फोट करता है लेकिन विभिन्न कनेक्शन प्रश्नों के साथ ... एक उपयोगकर्ता एक पृष्ठ में प्रवेश करता है, एक कनेक्शन है, दूसरे पृष्ठ में परिवर्तन बी कनेक्शन है , लेकिन एक नया उपयोगकर्ता सी पर जाता है, और वह ए या बी को तब तक देखता है जब तक यह बदला नहीं जाता ... वास्तव में निराशाजनक है कि वह प्रति उपयोगकर्ता सिंगलटन का उपयोग करने में सक्षम न हो ... – matiaslauriti

0

नहीं, PHP एएसपी.नेट के रूप में बेवकूफ नहीं है (क्या यह गंभीरता से करता है?)। PHP में स्टेटिक चर प्रति उदाहरण हैं (यह एएसपी.नेट की तरह नहीं है जहां पूरा पृष्ठ एक उदाहरण है, प्रत्येक उपयोगकर्ता को अपना स्वयं का PHP उदाहरण मिलता है)।

यदि 2 उपयोगकर्ता एक PHP पृष्ठ पर जाते हैं, और एक पृष्ठ पर MyClass::$myVar = true चलाया जाता है, तो यह अन्य उपयोगकर्ता को प्रभावित नहीं करता है।

+0

यह बेवकूफ क्यों है? स्टेटिक सत्र चर नहीं है। आप जो कहते हैं उससे php पृष्ठों पर स्थिर उपयोगकर्ता से जुड़े होते हैं, और यह कैसे हो सकता है? यदि उपयोगकर्ता के पास कोई कुकी नहीं है? तो स्थैतिक जुड़ा हुआ नहीं है और हर बार एक नया स्थैतिक पैदा होता है? मुझे लगता है कि एमएस ने बहुत अच्छा काम किया है, पूल के लिए स्थिर क्या है। – Aristos

+0

asp.net उपयोगकर्ता सत्र चर जो आप कहते हैं। दूसरी तरफ से सभी चल रहे उदाहरणों में PHP सामान्य डेटा कैसे रखता है? उदाहरण के लिए, मैं कुछ ऐसी चीज घोषित करने के लिए स्थिर का उपयोग करता हूं जो परिवर्तन नहीं करता है और सभी उपयोगकर्ताओं पर बहुत कुछ उपयोग करता है, आप इसे php पर कैसे करते हैं? – Aristos

+0

@Aristos: "ऐसा कुछ घोषित करें जो बदले नहीं जा रहा है और सभी उपयोगकर्ताओं पर बहुत अधिक उपयोग किया जाता है" आप नहीं करते हैं, या आप इसे डेटाबेस में संग्रहीत करते हैं। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^