2011-08-08 11 views
6

मैं php.net के ऑपरेटर पूर्वता अनुभाग के माध्यम से जा रहा है और this example जो कहते हैंअंतर: ऑपरेटर पूर्वता और कम सर्किटिंग

$a = 1; 
$b = null; 
$c = isset($a) && isset($b); 
$d = (isset($a) and isset($b)); 
$e = isset($a) and isset($b); 
var_dump($a, $b, $c, $d, $e); 
//Result: 
int(1) 
NULL 
bool(false) 
bool(false) <== I get this 
bool(true) <== I do not get this 

मैं काफी डिबगिंग का एक बहुत का उपयोग करें और भर में आया कोड में कहां हूं, इसका ट्रैक रखने के लिए मेरे कोड में वर्बोज़ प्रिंट (_r) स्टेटमेंट्स। तो मैं कोड के बीच अलग-अलग बयान के रूप में $debug and print_r($dataArray) या $verbose and print "Updating dataArray\n" का उपयोग करता हूं, जिससे मुझे इन प्रिंट (_r) कथनों को नियंत्रित करने की अनुमति मिलती है। यह मेरे बाश अनुभव से आता है जहां मैं बहुत सारे [[ $condition ]] && { #Do if true } || { #Do if false } लिखता था। बाश में, मुझे पता था कि वे कम सर्किट हैं और इस तथ्य का उपयोग बहुत सरल एक लाइनर लिखने के लिए करते हैं।
अब मैं देख रहा हूं कि इस अभ्यास के बहुत सारे ($verbose and print लिखने) धीरे-धीरे मेरे if कथन में रेंग रहा है। मुझे पता है कि यह एक अनुशंसित अभ्यास नहीं है और मुझे वापस में काट सकता है। हालांकि, मैं इस कौशल को मास्टर करना चाहता हूं क्योंकि मुझे ऐसे लाइनर लिखने का आनंद मिलता है और इसे व्यक्तिगत शैली के रूप में उपयोग करना चाहते हैं।

तो मेरे सवाल (रों) (हैं) है:

  1. कौन सा ऑपरेटर (&& या and) लघु सर्किट है?
  2. मैनुअल कहता है &&and से अधिक प्राथमिकता लेता है, लेकिन क्या कोई ऑपरेटर प्राथमिकता के साथ लघु सर्किट ऑपरेटर सुविधा/कार्यक्षमता/विशेषता को मिश्रित करके इसका उदाहरण दे सकता है। (मूल रूप से मिश्रण और प्राथमिकता और शॉर्ट-सर्किटिंग का मिलान)

कृपया शॉर्ट-सर्किटिंग के साथ-साथ ऑपरेटरों की वापसी मूल्य प्रकृति दोनों पर विस्तार से विस्तृत करें।

पीएस: 1. मुझे आशा है कि इन ऑपरेटरों की साझेदारी समान और सहज है, लेकिन यदि आप किसी भी quirks पता है, तो कृपया मुझे प्रबुद्ध करें।
पीएस: 2. यदि आप अभी भी इस तरह के अभ्यास के खतरों के खिलाफ मुझे चेतावनी देने की तरह महसूस करते हैं, तो कृपया उदाहरणों को शामिल करें।

संपादित करें: || साथ or की जगह मेरी सरल $var = mysql_(...) or die() कोड बदलने के बाद, मुझे पता चला कि कैसे कष्टप्रद यह and और or के बजाय || और && ऑपरेटरों का उपयोग करने के लिए हो सकता है। कोड बस काम नहीं किया! मेरी समझ के लिए, पूर्व निर्माण TRUE या FALSE से $var का वापसी मान निर्दिष्ट करता है, जो बदले में चेतावनी/त्रुटि/अप्रत्याशित व्यवहार उत्पन्न करने के लिए $var के अनुक्रमिक उपयोग को बनाता है। उत्तरार्द्ध निर्माण mysql_(...) से $var का परिणाम निर्दिष्ट करता है और फिर = और die के परिसर का मूल्यांकन करता है।
यह मेरे लिए एक अच्छा सबक है, मैं बेहतर हूं 1. पीडीओ/माइस्क्ली का उपयोग करना शुरू करें और अपनी खुद की त्रुटियों को संभालें 2. कुछ लिखने से पहले दो बार सोचें जिसे मैंने व्यक्तिगत शैली कहा है।
// स्वयं के लिए नोट: एक पटकथा/व्याख्यात्मक भाषा, जबकि एक अन्य में कोड लिखने, हर एक अद्वितीय है और अपने स्वयं के quirks और नुकसान है, और thats सिर्फ दुख की बात * आह *

+0

संभावित डुप्लिकेट [संदर्भ - PHP में यह प्रतीक क्या है?] (Http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) – Gordon

+0

@Gordon : _Reference_ के लिए धन्यवाद। मैंने सूची की जांच की और हालांकि कुछ प्रश्न प्रश्नों के हिस्से का जवाब देने लगते हैं (जैसे प्राथमिकता, जिसे मैं पहले से जानता था)। आईएमएचओ ऑपरेटरों की शॉर्ट सर्किट प्रकृति के साथ उनकी प्राथमिकता के साथ विस्तार से चर्चा नहीं की गई है। – Sudhi

+0

उदाहरण लिंक पर टिप्पणी के लेखक ऑपरेटर प्राथमिकता का उल्लेख करते हैं जो इंगित करता है कि बराबर के बाद और कीवर्ड का मूल्यांकन किया जा रहा है। यह अजीब प्रतीत होता है लेकिन यह मुझे कुछ 'mysql_connect (...) या मरने() 'लाइनों की कुछ स्क्रिप्ट का उपयोग करता है। –

उत्तर

7

कोड के अनुभव का उपयोग नहीं करते evaluati के स्वतंत्र -

$e = isset($a) and isset($b); 

रूप isset($a) और असाइनमेंट द्वारा निर्धारित किया जाता है, के रूप

($e = isset($a)) and isset($b); 

इसलिए $e ही पार्स किया गया है, true है एनजी isset($b)

+1

तो स्पष्ट होना: यह शॉर्ट सर्किटिंग से संबंधित नहीं है। –

+0

@ फ़ेलिक्स: क्या आप PHP में शॉर्ट सर्किटिंग के बारे में लिख/व्याख्या/विस्तृत कर सकते हैं? मैं विशेष रूप से वापसी मूल्य के बारे में चिंतित हूं जो शॉर्ट सर्किटिंग के बाद उत्पन्न होता है। – Sudhi

+1

@ सुधी: मुझे समझ में नहीं आता कि आप मुझे क्या लिखना चाहते हैं। इन सभी ऑपरेटरों ('&&', '||', 'और',' या') संक्षिप्त सर्किटिंग हैं ... वापसी मूल्य हमेशा एक बूलियन मान होता है। –