बिटवाइज ऑपरेटर
बिटवाइज़ ऑपरेटर शामिल मूल्यों के बिट्स को संशोधित करते हैं। OR
मूल रूप से बिट और दाएं तर्क दोनों के प्रत्येक बिट के साथ एक बिटवाइज़ । उदाहरण के लिए:
5 | 2
बिट्स / बाइनरी में अनुवाद करेगा:
101 | 10
जिसके परिणामस्वरूप होगा:
111
चूंकि:
1 || 0 = 1
0 || 1 = 1
1 || 0 = 1
और एक पूर्णांक के रूप में जो कि 7 का प्रतिनिधित्व है जो वास्तव में आपको मिलता है अगर आप:
echo 5 | 2;
एडी इज़र्ड के शब्दों में ... झंडा!
जैसा कि इग्नासियो बताता है, यह अक्सर कई झंडे को संयोजित करने के तरीके के रूप में PHP (और अन्य भाषा) में उपयोग किया जाता है। प्रत्येक ध्वज को आमतौर पर एक स्थिरांक के रूप में परिभाषित किया जाता है, जिसका मूल्य सामान्य रूप से एक पूर्णांक पर सेट होता है जो एक अलग ऑफसेट पर सिर्फ एक बिट का प्रतिनिधित्व करता है:
define('FLAG_A', 1);
define('FLAG_B', 2);
define('FLAG_C', 4);
define('FLAG_D', 8);
तब जब आप OR
इन दोनों को एक-दूसरे के साथ अपने बिट ऑफसेट पर संचालित करते हैं और कभी टकराते नहीं हैं:
FLAG_A | FLAG_C
इसके लिए अनुवाद:
1 | 100
तो आप अंत में चालू करते हैं:
101
जो पूर्णांक 5 का प्रतिनिधित्व करता है।
फिर सभी कोड को करना होगा- वह कोड जो सेट किए जा रहे अलग-अलग झंडों पर प्रतिक्रिया देगा- निम्नलिखित है (बिटवाइज़ का उपयोग करके AND
):
$combined_flags = FLAG_A | FLAG_C;
if ( $combined_flags & FLAG_A ) {
}
if ( $combined_flags & FLAG_B ) {
}
if ( $combined_flags & FLAG_C ) {
}
दिन के अंत में यह केवल चीजों को नामांकित करके पढ़ना आसान बनाता है, और आम तौर पर तार या सरणियों के बजाय पूर्णांक मानों पर निर्भर होकर अधिक इष्टतम होता है। स्थिरांक का उपयोग करने का एक अन्य लाभ यह है कि यदि उपयोग किए जाने पर उन्हें कभी गलत समझा जाता है, तो संकलक बताने और चेतावनी फेंकने के लिए बेहतर स्थिति में है ... यदि एक स्ट्रिंग मूल्य का उपयोग किया जाता है, तो यह जानने का कोई तरीका नहीं है कि कुछ भी गलत है।
define('MY_FLAG_WITH_EASY_TYPO', 1);
my_function_that_expects_a_flag( MY_FLAG_WITH_EASY_TPYO );
my_function_that_expects_a_flag( 'my_string_with_easy_tpyo' );