php एक एकल पाइप '|' का उपयोग क्या करता है एक समारोह तर्क में क्या करते हैं?




function arguments (2)

उदाहरण के लिए निम्नलिखित कोड लें:

phpinfo(INFO_MODULES | INFO_ENVIRONMENT | INFO_VARIABLES);

एक भी तर्क का उपयोग किया जा रहा है, लेकिन मैं एक पाइप प्रतीक से अलग विकल्पों की एक सूची प्रदान कर रहा हूं।

  • फ़ंक्शन में तर्क मान के साथ वास्तव में क्या हो रहा है?
  • क्या मैं अपने कार्यों में एक ही चीज़ का उपयोग कर सकता हूं?
  • ऐसा कैसे है, और इसके बजाय इसके लिए कोई सरणी गुजरने के लिए लाभ हैं?

पहले ही, आपका बहुत धन्यवाद।


बिटवाई ऑपरेटर

बिटवाई ऑपरेटर शामिल मूल्यों के बिट्स को संशोधित करते हैं। थोड़ा सा OR मूल रूप से बाएं और दाएं तर्क दोनों के प्रत्येक बिट को एक साथ जोड़ता है। उदाहरण के लिए:

5 | 2

बिट्स / बाइनरी के रूप में अनुवाद करेंगे:

101 | 10

जिसके परिणामस्वरूप:

111

इसलिये:

1 || 0 = 1
0 || 1 = 1
1 || 0 = 1

और एक इंटीजर के रूप में जो 7 का प्रतिनिधित्व है जो आपको मिलता है यदि आप:

echo 5 | 2;


एडी Izzard के शब्दों में ... झंडा!

इग्नासिओ के रूप में, यह अक्सर कई झंडे को गठबंधन करने के लिए PHP (और अन्य languges) में उपयोग किया जाता है। प्रत्येक ध्वज को आम तौर पर स्थिर के रूप में परिभाषित किया जाता है जिसका मूल्य सामान्य रूप से एक पूर्णांक पर सेट होता है जो एक अलग ऑफसेट पर केवल एक बिट का प्रतिनिधित्व करता है:

define('FLAG_A', 1); /// 0001
define('FLAG_B', 2); /// 0010
define('FLAG_C', 4); /// 0100
define('FLAG_D', 8); /// 1000

फिर जब आप OR इन दोनों के साथ वे प्रत्येक को अपने स्वयं के ऑफसेट पर संचालित करते हैं और कभी नहीं टकराएंगे:

FLAG_A | FLAG_C

अनुवाद करता है:

1 | 100

तो आप चालू करना खत्म कर देते हैं:

101

जो पूर्णांक 5 का प्रतिनिधित्व करता है।

फिर सभी कोड को करना होगा-कोड जो अलग-अलग झंडे पर प्रतिक्रिया दे रहा है-निम्नलिखित है (थोड़ा सा AND उपयोग करके):

$combined_flags = FLAG_A | FLAG_C;

if ( $combined_flags & FLAG_A ) {
  /// do something when FLAG_A is set
}

if ( $combined_flags & FLAG_B ) {
  /// this wont be reached with the current value of $combined_flags
}

if ( $combined_flags & FLAG_C ) {
  /// do something when FLAG_C is set
}

दिन के अंत में यह केवल स्थिरांक नामक चीजों को पढ़ने में आसान बनाता है, और आम तौर पर स्ट्रिंग या सरणी के बजाय पूर्णांक मानों पर भरोसा करके अधिक इष्टतम बनाता है। स्थिरांक का उपयोग करने का एक अन्य लाभ यह है कि यदि उपयोग किए जाने पर उन्हें कभी भी गलत टाइप किया जाता है, तो संकलक एक चेतावनी देने और चेतावनी देने के लिए बेहतर स्थिति में होता है ... यदि एक स्ट्रिंग मान का उपयोग किया जाता है तो इसका कोई तरीका नहीं है कि कुछ भी गलत है।

define('MY_FLAG_WITH_EASY_TYPO', 1);

my_function_that_expects_a_flag( MY_FLAG_WITH_EASY_TPYO );

/// if you have strict errors on the above will trigger an error

my_function_that_expects_a_flag( 'my_string_with_easy_tpyo' );

/// the above is just a string, the compiler knows nowt with 
/// regard to it's correctness, so instead you'd have to
/// code your own checks.

आप एक तर्क पारित कर रहे हैं जो बिटवाई या एकाधिक झंडे हैं । आप कहीं भी ऑपरेटर का उपयोग कर सकते हैं।





bitwise-operators