Back to Question Center
0

आधुनिक PHP मध्ये Bitwise ऑपरेटर अद्याप संबंधित आहेत?            आधुनिक PHP मध्ये अद्याप बीटिव्ह ऑपरेटर्स संबंधित आहेत? संबंधित विषय: नमुने & आचरण डिबगिंग & मिमल

1 answers:
बीटिव्ह ऑपरेटर्स अद्याप आधुनिक PHP मध्ये संबंधित आहेत?

आपल्यातील बरेचजण कदाचित आपल्या डोक्यावर हे शीर्षक वाचून चिडले. "बिटवाट?"

या लेखात, आम्ही थोडक्यात ऑपरेटर्स काय आहेत ते पहात आहोत, आणि त्याचा वापर कंप्यूटिंगच्या या आधुनिक युगात अद्यापही प्रासंगिक आहे किंवा नाही.

आधुनिक PHP मध्ये Bitwise ऑपरेटर अद्याप संबंधित आहेत?आधुनिक PHP मध्ये अद्याप बीटिव्ह ऑपरेटर्स संबंधित आहेत? संबंधित विषय:
नमुने आणि सराव: डीबगिंग आणि मिमल

उदाहरण केस वापरा

येथे बीटवार ऑपरेटर्स सूचीबद्ध आहेत, पण खरोखर घराचे उदाहरण चालवण्यासाठी, आम्ही फक्त एकावर लक्ष केंद्रित करू: द बिटwise आणि ( & ). उदाहरणार्थ मी माझ्यासाठी क्लिक करतो तर आपण असे करू - एक उदाहरणाने सरळ पुढे जा.

कल्पना करा की आपल्याकडे एक वेबसाइट आहे ज्यावर दिलेल्या वापरकर्त्यास विशिष्ट परवानग्या असू शकतात - security camera uk wireless spectrum. उदाहरणार्थ, एक पत्रिका जसे साइटपॉईंट:

    (2 9) लेखक CRUD ड्राफ्ट तयार करू शकतात आणि त्यांचे प्रोफाइल संपादित करू शकतात. (2 9) वरील संपादकांव्यतिरिक्त, सीआरयूडी ड्राफ्ट्स आणि पुरेशी पोस्ट्स, आणि सीआरडड लेखक प्रोफाइल. (2 9) प्रशासक वरील व्यतिरिक्त, प्रशासक परवानग्या जोडू शकतो.

वापरकर्त्याला सममूल्य एकापेक्षा जास्त परवानग्या मिळू शकतात, डेटाबेसमध्ये परवानग्या परिभाषित करण्यासाठी आणि प्रणालीचा उपयोग करून घेण्याचे अनेक मार्ग आहेत.

डबल जॉइन व्हा

भूमिका जोडा, परवानग्या जोडा, जोडणीत टेबलमधील भूमिका जोडण्यासाठी परवानग्या जोडा, नंतर आणखी एक सामील व्हा टेबल तयार करा आणि काही वापरकर्त्यांना काही भूमिका द्या.

हा दृष्टिकोन चार अतिरिक्त टेबला तयार करतो:

    (2 9) परवानग्या (2 9) भूमिका (2 9) परवानग्या <-> भूमिका (2 9) भूमिका <-> वापरकर्ते

ओव्हरहेडचा बराचसा भाग. Semaltेटला काही वारंवार भेट दिलेल्या सूचीमध्ये नियमितपणे अॅपमध्ये संपादित करणे किंवा त्यांची सूची करणे आवश्यक असते. केवळ जड कॅशिंग हे अॅप्स भारी ओझ्याखाली कोसळून ते जतन करेल.

तथापि, एक फायदा म्हणजे, छोट्या परवान्यांसह भूमिका खरोखरच चांगल्या प्रकारे परिभाषित करून, आपल्याला वापरकर्त्यांना भूमिकांमध्ये केवळ चिकटविणे आवश्यक आहे आणि आपण चांगले आहात - हे असेच ठेवते की टेबल लाइट आणि जलदमध्ये सामील होणे.

एकल सहभागी व्हा

परवानग्या जोडा, सामील करा टेबल जोडा, काही वापरकर्त्यांना काही परवानग्या संलग्न करा

हा दृष्टिकोन दोन अतिरिक्त टेबल तयार करतो:

    (2 9) परवानग्या (2 9) परवानगी <-> वापरकर्ते

मागील उदाहरणापेक्षा खूप कमी ओव्हरहेड, परंतु आपल्याकडे सामील होण्यामध्ये बरेच अधिक प्रविष्ट्या आहेत कारण एका वापरकर्त्याकडे बरेच परवानग्या मिळू शकतात (फक्त मसुदा तयार करण्यासाठी सीआरयूयूडी स्वतः 4 परवानग्या आहे). बर्याच वापरकर्त्यांसह आणि बर्याच परवानग्यासह, ही सारणी तात्काळ गती मिळवू शकते

द कॉलम स्टॉपेड (3 9)

प्रत्येक परवान्यासाठी वापरकर्त्याच्या सारणीत एक स्तंभ जोडा, नंतर "चालू" किंवा "बंद" म्हणून परवानगी तपासण्यासाठी त्याचा डेटाटाइप एक टिनिंट (मुळात बुलीयन) करा.

वापरकर्त्यासाठी साप्ताहिक परवानग्या नंतर असे काहीतरी दिसतील:

     `वापरकर्ते` SET` संपादित कराप्रोफाइल` = 1,` हटवाप्रोफाइल` = 0, `तयार कराआलेख` = 1,` प्रकाशनशुल्क` = 0. अद्ययावत करा. 'Id` = 5 कुठे आहे    

या पध्दतीमध्ये अतिरिक्त टेबल्स जोडलेले नाहीत, परंतु टेबलला मोठ्या प्रमाणावर रुंदीमध्ये वाढवणे आवश्यक आहे, आणि जेव्हा नवीन परवानगी जोडली जाते प्रत्येक वेळी डाटाबेसमध्ये फेरबदल आवश्यक असतो. जेव्हा आपण समजता तेव्हा आपल्याला भविष्यासाठी भविष्यासाठी दोन किंवा तीन परवानग्या मिळतील, परंतु त्यापेक्षा अधिक कशासाठीही वापरली जाऊ नये यासाठी सूक्ष्म दृष्टिकोन चांगला असतो.

Semaltेट, कारण स्तंभांची यादी जेव्हा दूरून बघितली जाते तेव्हा ती एक बायनरी नंबर (1010) सारखी दिसते, हा दृष्टिकोन दुसर्यामध्ये एक उत्कृष्ट segway आहे .

बिटुवारी अप्रोच

आम्ही या पद्धतीत सखोल वाटू शकतो, चला बायनरीमध्ये क्रॅश कोर्स करा.

बायनरी संख्या (3 9)

सर्व संगणक डेटा बायनरी म्हणून संग्रहित करतात: 0 किंवा 1. म्हणून, संख्या 14 हे प्रत्यक्षात संचयित केले आहे: 1110. त्यामुळे संख्या 1337 म्हणजे:

    (2 9) 1 x 7 (2 9) + 3 x 10 (2 9) + 3 x 100 (2 9) + 1 x 1000

डेसिमल सिस्टिम (बेस 10) मध्ये प्रत्येक अंक सोडल्यास 10 ने गुणाकार केला जातो. पहिला म्हणजे 1, पुढचा 10, पुढचा 100, पुढचा 1000 इत्यादी.

बायनरी मध्ये, बेस 2 आहे, म्हणून प्रत्येक अंक 2 ने गुणाकार केला जातो. संख्या 1110 हे आहे:

    (2 9) 0 x 1 (2 9) + 1 x 2 (2 9) + 1 x 4 (2 9) + 1 x 8

सेमीलेट 2 + 4 + 8, जे 14. आहे

होय, बायनरी संख्या दशांमधून रूपांतरित करणे सोपे आहे.

जेव्हा आपण 1010 च्या आधी आपल्या परवानग्यांकडे बघतो, तेव्हा ती द्विअंकी स्वरूपात क्रमांक 10 म्हणून देखील पाहिली जाऊ शकते. हम्म, कदाचित आम्ही येथे काहीतरी वर आहोत

आमच्याकडे 1010 परवानग्या असल्यास, याचा अर्थ असा की 2 रा व 4 था बिल्ट सेट आहेत, तर पहिल्या आणि तिसऱ्या नाहीत (कारण ते 0 आहेत).

बायनरी भाषेत, आम्ही प्रत्यक्षात म्हणतो की 0 व 2 था बिटम सेट नाही, कारण ते 0 पासून मोजले जातात, जसे की अॅरे. याचे कारण असे की त्यांचे आडनावाचे (1 ले, 2 रा, 3 रा) त्यांचे घातांक आहे. 0 वी बिट प्रत्यक्षात 2 च्या 0 च्या (2 ^ 0) सामर्थ्याशी आहे जे 1 बरोबरीचे आहे. पहिली बीटी 2 ची 1 (2 ^ 1) शक्ती आहे 2. 2 रा 2 स्क्वेअर (2 ^ 2) 2 आहे 4 समीकरणे इत्यादी. हे सर्व लक्षात ठेवणे सोपे आहे.

मग हे आम्हाला कसे मदत करते?

बिटुवारी अप्रोच (3 9)

ठीक आहे, येथून परवानग्या पाहताना, आम्ही सर्व स्तम्भ एकाच वेळी एकाच बायनरी क्रमांकासह प्रदर्शित करू शकतो. जर आपण एका वेळी एकाच बायनरी क्रमांकासह सर्व कॉलम दर्शवू शकतो, तर याचा अर्थ असा की आपण एका पूर्णांकाने ते दशांशमध्ये भाषांतरित करू शकतो!

जर आपल्याजवळ एक परवानग्या स्तम्भ ज्यामध्ये मूल्य 14 समाविष्ट होते, आता आम्हाला हे कळेल की हे प्रत्यक्षात 1110 आहे, आणि आम्हाला कळेल की आम्ही चार पैकी तीन परवानग्या आहेत! पण कोणत्या 3 आमच्या 4?

परवान्याच्या खालील मॅपिंगचा परिमाण करणे:

(14 9) (1 9 6)(1 9 7)

बायनरीमधील संख्या 141 1110 आहे, परंतु डाव्या बाजूला शून्य संख्यांची काही फरक पडत नाही, त्यामुळे आपण टेबलमध्ये परवान्यांची संख्या पोहोचत नाही तोपर्यंत आम्ही ते पॅड करू शकतो: 0000001110. हे अजूनही 14 आहे, केवळ प्रतिनिधी वरील सारणीतील परवानग्या सर्व हेतू आणि उद्देशांसाठी, 0000001110 === 1110.

त्यानुसार, आम्हाला 14 परवानगी DRAFT_DELETE , DRAFT_PUBLISH , आणि FINISHED_EDIT परवानगी असलेल्या खात्यावर दिसेल. ). खर्या जगाच्या परवानगीच्या व्यवस्थेचा नेमका प्रतिनियुक्ती नाही, हे मान्य आहे, पण हे केवळ एक उदाहरण आहे ज्याद्वारे आम्ही 1111111111 प्राप्त करू शकलो असतो तर त्यांच्याकडे सर्व परवानग्या (संभाव्यतः प्रशासन वापरकर्ता) असणे आवश्यक आहे. दशांशमध्ये, हे 1023 आहे. म्हणून, 1023 परवानग्या स्तंभात मूल्य असलेल्या प्रत्येक व्यक्तीस सर्व परवानग्या असलेली व्यक्ती आहे

पण आपण आपल्या कोडमध्ये हे कसे तपासायल? दुसर्या शब्दात सांगायचे तर, परवानगीची बीट किंवा नाही सेट केली असल्यास, एखादी संख्या दशांश म्हणून संचयित केली असल्यास आणि बायनरी नसल्यास आपल्याला कसे कळेल?

हे थोडकशा दिशात्मक ऑपरेटर आहेत - विशेषतः सिंगल अँपरसँड आणि , ज्याला बिटावार आणि म्हणून ओळखले जाते.आपण त्यांचे मूल्य: 256, 128, 64, 32, 16, 8, 4, 2, किंवा 1 बदलून इतर बिट तपासा.


[वैकल्पिक] "चला तांत्रिक मिळवा" साइड-नोट

आपण या ऑपरेटर, किंवा तत्सम ऑपरेटर कसे कार्य करते हे जाणून घेऊ इच्छित नसल्यास हा विभाग विभागित करा, परंतु उदाहरण पुढे चालू ठेवण्यात फक्त स्वारस्य आहे.

जेव्हा आम्ही म्हणतो आणि 512 आणि परवानग्या आम्ही भाग शोधत आहोत आणि सत्य असल्याचे, कारण एस क्यू एल क्वेरींनी तेच कार्य केले आहे - ते अटींचे मूल्यांकन करतात आणि त्या रकमे परत करतात जी आवश्यकतांबद्दल सत्य सांगतात .

म्हणून, 512 आणि परवानग्या सत्यतेचे मूल्यांकन करणे आवश्यक आहे. आपल्याला माहित आहे की कोणतेही शून्य-शून्य मूल्य, ती एक पूर्णांक असेल, एक बुलियन जो "सत्य" म्हणते, किंवा रिकामी नसलेली स्ट्रिंग म्हणून प्रत्यक्षात "सत्य" म्हणून विचारात घेतली जाते. त्यामुळे 512 सत्य आहे. 1 सत्य आहे. 0 चुकीचे आहे. 128 सत्य आहे इत्यादी.

512 हे बेस -10 पूर्णांक आहे आणि परवानग्या एक स्तंभ आहे ज्यामध्ये बेस -10 पूर्णांक असू शकतो. बिटwise आणि प्रत्यक्षात या दोन संख्यांच्या क्रॉस-सेक्शन पाहते आणि त्यातील दोन्ही

सेट केलेल्या बिट्स परत करते. म्हणून जर 512 ही संख्या 1000000000 असेल आणि जर परवानग्या मूल्याची किंमत 1023 असेल तर ती 1111111111 ची बायनरीमध्ये रूपांतरित होईल. त्या रिटर्नची क्रॉस सेक्शन 100000000000 कारण फक्त डाव्या-सर्वात बिट दोन्ही संख्यांमध्ये सेट केल्या जातात. जेव्हा आपण हे पुन्हा डेसिमलमध्ये रूपांतरित करतो, तेव्हा 512, जे सत्य आहे .

Semaltेट हे अरिजमॅटिक ऑपरेटर नसून ते तार्किक आहेत, त्यामध्ये ते एका अटवर आधारित सत्यतेची तपासणी करतात. जर आमच्याकडे 1110 आणि 1010 क्रमांक आहेत, तर ते वेगळे बीटवाइसे ऑपरेटर देताना ते तयार करतात:

बदला अधिसूचना प्रोफाइल तयार करा प्रोफाइल संपादन प्रोफाइल हटवा मसुदा तयार करा ड्राफ्ट संपादित ड्राफ्ट डेलेट ड्राफ्ट प्रकाशन अंतिम रिपोर्ट पूर्ण डेलीट
512 256 128 64 32 16 8 4 2 1
(14 9) (1 9 6)(1 9 7)
    (2 9) आणि एक द्विअंकी नंबर देते ज्यात सर्व बिंद्सेट सेट केले जातात जे दोन्ही ऑपरॅन्डमध्ये सेट केले आहेत. (2 9) | प्रत्येक बिंद सेटसह बायनरी संख्या परत करते जे एकतर ऑपरेटॅंडमध्ये सेट आहे. (2 9) ^ प्रत्येक बिंद सेटसह एक बायनरी नंबर देते जे एकतर ऑपरेटॅंडमध्ये सेट आहे, परंतु दोन्ही नाही. (2 9) ~ फक्त उलट परत - मूळ संचालक मध्ये सेट नाही सर्व त्या आता सेट आहेत.

बिटमवार शिफ्ट ऑपरेटर देखील आहेत: डावीकडील शिफ्ट << आणि उजवे वळण >> . हे नाटकीयपणे सर्व सेट बिट्स एका जागी उजवीकडे किंवा डाव्या बाजूला हलवून बायनरी संख्याचे मूल्य बदलते. आमच्या संदर्भात त्यांचे वापर विचाराधीन आहे, म्हणून आम्ही येथे त्यांना पांघरूण करणार नाही.


आणि PHP मध्ये थोडा सेट केला असल्यास आपण तपासू शकतो:

     जर (1023 व 1) {}    

पण हे खरोखर, कोणत्याही गोष्टीचा उलगडा करणे खरोखर कठीण आहे - फक्त कच्च्या संख्यांकडे पाहताना खरोखर वाचनीय किंवा समजण्यायोग्य नाही. तर, PHP मध्ये, परवानगीची व्याख्या बिट्स म्हणून परिभाषित करणाऱ्या स्थिरांकांचा आणि स्तंभमधील परवानगीच्या पूर्णांक मूल्याची पूर्तता करणे अधिक चांगले आहे. मग, आपण असे काहीतरी संपवतो:

     जर ($ user-> परवानग्या आणि \ MyNamespace \ Role: FINISHED_DELETE) {//}    

येथे असे गृहीत धरले आहे की आपल्याला \ MyNamespace \ भूमिका परिभाषित आणि स्थिरांकांसह भारित केले आहे:

     कॉन्स्ट FINISHED_DELETE = 1;const FINISHED_EDIT = 2;const DRAFT_PUBLISH = 8; const CHANGE_PERMISSIONS = 512;    

Semaltेट, आपल्याला अतिरीक्त टेबल वापरल्याशिवाय आणि अनावश्यक ओव्हरहेड तयार न करता वापरकर्त्यास एकाधिक परवानग्या संचयित करण्याचा एक सोपा मार्ग मिळाला आहे. म्हणूनच, त्यांच्या परवानग्या जतन करण्यासाठी, आपण त्यांची बेरीज करा (1 + 2 = 3) आणि 3 परवानग्या स्तंभामध्ये जतन करा. येथे अन्य कोणताही मार्ग नाही बायनरी जोडणीसह नंबर 3 - 0011 चा नंबर 3 हे बायनरीमध्ये 0011 पेक्षा इतर कोणत्याही प्रकारे दर्शवता येणार नाही - म्हणजे आपण 100% निश्चित होऊ शकता जे नंबर 3 नेहमीच वापरतात परवानगी 1 आणि परवानगी 2, स्थिरांमधील त्यांच्या मूल्यांशी संबंधित आहे.

हे अगदी सोपे आणि व्यावहारिक वाटते, बरोबर? झेल सममूल्य?

सावधानता

Semaltेट दोन प्रमुख सावधानता आहेत:

    (2 9) पुढील परवानगीच्या बिट मूल्याची गणना करताना आपल्याला 2 ची शक्ती वापरताना लक्षात ठेवा. जर आपल्याला नवीन परवानगी जोडण्याची आवश्यकता असेल तर आपण 5 9 5 वर आधीपासूनच 543 वर निवडू शकत नाही - हे 1024 आहे. संख्या थोडी अधिक जटिल होते कारण संख्या अधिक मोठ्या होतात. (2 9) कारण आमचे संगणक 64 बिट CPU वर 64 बिट कार्यप्रणाली चालवत आहेत (मुख्यतः - काही अगदी 32 बिट वर अजूनही अडकले आहेत!), याचा अर्थ एका संख्येस जास्तीत जास्त 64 बिट्स असू शकतात. याचाच अर्थ असा की आपण एखाद्या दिलेल्या वापरकर्त्यावर जास्तीत जास्त 64 परवानग्या बदलण्याची परवानगी देऊ शकता. लहान ते मध्यम साइटसाठी हे पुरेसे आहे, परंतु प्रचंड वेबसाइट्सवर हे एक समस्या होऊ शकते. वेगवेगळ्या परवानगी संदर्भासाठी भिन्न स्तंभ वापरण्यासाठी उपाय आहे ( मसुदा-प्रदत्त , खाते_पाणी , इ.). त्या प्रत्येक कॉलममध्ये 64 परवान्यांची स्वतःची परस्परक्रियांस असू शकतात, जे अगदी सर्वात मागणी असलेल्या वेबसाइट्ससाठी देखील पुरेसे आहे.

निष्कर्ष

बीटिव्ह ऑपरेशन्सना आधुनिक प्रोग्रामिंगमध्ये निश्चितपणे स्थान आहे. समतुल्य तेवढेच क्लिष्ट काहीतरी वापरण्यास प्रतिबंधात्मक (हे खरोखरच नाही - हे आजच्या दिवसाचे जवळजवळ तितकेच परिचित नाही) हे दृष्टिकोन अनेक फायदे आणते - कार्यक्षमतेत कमीतकमी नाट्यमय वाढ होत नाही, दोन्ही डेटामध्ये आकार (डेटाबेसमध्ये संग्रहित करण्यासाठी आणि नंतर आणण्यासाठी खूप कमी माहिती) आणि गती (एक वापरकर्ता ऑब्जेक्ट त्यांच्या परवानगी मूल्य पूर्व-प्राप्त केले जाऊ शकते - हे फक्त एक इंट आहे - आणि अशा प्रकारे हे नेहमीच तपासता येते).

येथे सादर केलेले मिल्ठॉल निश्चितपणे गोष्टी साधे बनतात, परंतु केवळ आपण आधीच वरील प्रात्यक्षिकांसारख्या अगदी सोप्या पर्यायाची माहिती घेत नसल्यासच

परवानगी तपासण्यासाठी आणि त्यांना संचयित करण्याच्या या दृष्टिकोनासाठी bitwise ऑपरेटर वापरण्याबद्दल आपल्याला कसे वाटते? कोणतीही स्पष्ट व्यावसायिक / बाधकता? आपण हे कसे करता ते आम्हाला सांगा, आणि का?

(3 9 4)(3 9 5) आधुनिक PHP मध्ये Bitwise ऑपरेटर अद्याप संबंधित आहेत?आधुनिक PHP मध्ये अद्याप बीटिव्ह ऑपरेटर्स संबंधित आहेत? संबंधित विषय:
नमुने आणि सराव: डीबगिंग आणि मिमल
(3 9 7)(3 9 8) लेखक भेटा
ब्रुनो स्कोवॉर (40 9)
ब्रुनो क्रोएशियाच्या कॉम्प्युटर सायन्स आणि इंग्लिश लँग्वेज अॅण्ड लिटरेचर या विषयातील एक कॉडोडर आहे. बिफफॉलमध्ये क्रिप्टोक्यूरॅन्सी व्यवसायात चालतो. कॉमद्वारे त्याने क्रिप्टोचे व्यवहार केले आणि ब्लॉकेन तंत्रज्ञानाला जनतेपर्यंत पोहोचवण्यास मदत केली. ते साइटपॉईंटचे संपादक देखील आहेत आणि डिफबोॉटसाठी विकासक लेखक आहेत. कॉम

- & | ^ ~
ऑपरेंड ए 1110 1110 1110 1110
ऑपरेंड बी 1010 1010 1010 /
निकाल 1010 1110 0100 0001

March 1, 2018