2010-12-21 14 views
21

&& "और" जैसा ही है, और || PHP में "या" जैसा ही है?PHP - और/या कीवर्ड

मैंने कुछ परीक्षण किए हैं, और ऐसा लगता है कि वे वही व्यवहार करते हैं। क्या कोई अंतर है?

यदि नहीं, तो क्या कोई अन्य PHP संकेत हैं जिनमें शब्द समकक्ष हैं और क्या आपको लगता है कि यह कोड को पढ़ने में आसान बनाता है?

+0

पुराने वीबी प्रोग्रामर, आईपी पर अधिक पा सकते हैं? हां, '&&' है और, लेकिन '&' है और (bitwise) है। '||' और '|' के लिए LIKwise क्रमशः OR और OR (bitwise) हैं। :: मैं इसे वापस लेता हूं, PHP अनुमति देता है और/या शब्द - अद्भुत। प्रति दिन कुछ नया सीखें। –

+0

नहीं :) मैंने टर्बो पास्कल से शुरुआत की, और मैं मानता हूं कि मुझे पास्कल सिंथैक्स पसंद है :) – Alex

+1

@Alex: आह, पास्कल/डेल्फी के दिन। मैं कैसे घृणा करता हूं, गलती का मतलब है _love_, उन दिनों ... –

उत्तर

34

and और or उच्च कम && और || से पूर्वता है। अधिक सटीक होने के लिए && और || असाइनमेंट ऑपरेटर (=) की तुलना में अधिक प्राथमिकता है जबकि and और or कम है।

http://www.php.net/manual/en/language.operators.precedence.php

आमतौर पर यह एक फर्क नहीं है, लेकिन ऐसे मामले हैं जब नहीं इस अंतर के बारे में जानते हुए भी कुछ अनपेक्षित व्यवहार का कारण बन सकती हैं। उदाहरण यहाँ देखें:

http://php.net/manual/en/language.operators.logical.php

+1

http://php.net/manual/hi/language.operators.php पर टिप्पणियां इंगित करती हैं कि उनके पास '=' के सापेक्ष भिन्न प्राथमिकता है। –

+0

@ थॉमस: जो मेरे उत्तर में पहले लिंक में भी दस्तावेज है;) लेकिन ... वास्तव में यह शायद सबसे महत्वपूर्ण अंतर है। मैं इसे उत्तर में जोड़ दूंगा। – Mchl

+1

'या' की निचली-से-असाइनमेंट प्राथमिकता उपयोगी हो सकती है: $ पृष्ठ = get_page() या $ पृष्ठ = 1; –

5

हाँ, वे तार्किक ही हैं। (मेरा मानना ​​है कि "& &" और "||" Zend coding standards में पसंदीदा विकल्प हैं, लेकिन मैं इस पर कोई विशेष जानकारी नहीं मिल रहा है, तो यह सब एक सपना। या कुछ हो सकता है।)

कि ने कहा:

  1. "& &" और "||" "AND" और "OR" की तुलना में higher precedence हैं (कभी प्रासंगिक होने की संभावना नहीं है, लेकिन आप कभी नहीं जानते)।

  2. कई अन्य भाषाओं में पाठक समकक्षों की बजाय "& &" और "||" का उपयोग किया जाता है, इसलिए यह इसके साथ जाने का विचार हो सकता है।

  3. जब तक आप ऑपरेटरों के अपने चुने हुए सेट का लगातार उपयोग करते हैं, यह वास्तव में कोई फर्क नहीं पड़ता।

+0

यदि "ऑपरेशन" की प्राथमिकता दो ऑपरेटरों के बीच है, तो यह एक बड़ा अंतर डाल सकता है - जो [वास्तव में मामला है] (http://php.net/manual/en/language.operators.precedence.php)! –

2

क्या मुझे परेशान है:

echo (false and false ? true : true); 
// (empty/false) 

आप अंदाज़ा लगा सकते केवल के संभावित उत्पादन नहीं है "1" (सही) के रूप में वहाँ कोई मामला नहीं है जो कर सकता उत्पादन एक झूठी ... .. लेकिन यह "" (झूठा) होगा।

इस मामले satifies कम से कम मेरी उम्मीदों में एक ऑपरेटर के रूप में उपयोग करते हुए & &:

echo (false && false ? true : true); 
// 1 

तो, कुछ मामलों में उपयोग के मामलों में काफी।

0

अंतर प्राथमिकता पर है। लेकिन न केवल एक दूसरे के साथ तुलना की!

ज्यादातर मामलों में आपको यह बुरा नहीं लगेगा, लेकिन विशिष्ट मामले हैं जब आपको एक कदम पीछे लेना और बड़ी तस्वीर देखना है।यह लो, उदाहरण के लिए:

// The result of the expression (true && false) is assigned to $g 
// Acts like: ($g = (true && false)) 
$g = true && false; 

// The constant true is assigned to $h before the "and" operation occurs 
// Acts like: (($h = true) and false) 
$h = true and false; 

var_dump($g, $h); 

यह उत्पादन करेगा क्रमश:

bool(false) 
bool(true) 

दूसरे शब्दों में, && जो and की तुलना में अधिक पूर्वता है, के रूप में http://php.net/manual/en/language.operators.precedence.php में कहा गया है = की तुलना में अधिक वरीयता, है। (यह अन्य उत्तरों में उल्लिखित है, लेकिन मुझे लगता है कि यह विस्तार से लायक है, क्योंकि एक दुरुपयोग तार्किक त्रुटियों का कारण बन सकता है)

मुझे आशा है कि यह आपकी मदद कर सकता है। आप http://php.net/manual/en/language.operators.logical.php

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