2017-03-06 10 views
6

Symfony कोरपीएचपी सशर्त असाइनमेंट

if ('' !== $host = $route->getHost()) { 
    ... 
} 

की पूर्वता में कोड का एक दिलचस्प टुकड़ा मिला! == = तुलना में अधिक है, लेकिन यह कैसे तार्किक काम करता है? पहला भाग स्पष्ट है लेकिन शेष?

मैं एक छोटे से नमूना बना लिया है लेकिन यह अभी भी स्पष्ट नहीं है: sample

+5

यह तरीका बचाने करो 'अगर ('' == ($ मेजबान = $ route-> getHost())!) {' कोष्ठक का उपयोग कर से बचने के – JustOnUnderMillions

+1

समस्या .. की [जे एस – scaisEdge

+1

संभावित डुप्लिकेट पीएचपी बनाम: काम लॉजिकल-या के साथ उपयोग किए जाने पर ऑपरेटर प्राथमिकता (http://stackoverflow.com/questions/32672016/js-vs-php-assignment-operator-precedence-when-used-with-logical-or) – ShiraNai7

उत्तर

3

बिंदु है: एक काम के बाएं हाथ की ओर एक चर हो गया है! आपके उदाहरण में इसे प्राप्त करने का एकमात्र संभावित तरीका पहले असाइनमेंट का मूल्यांकन करना है - जो वास्तव में php करता है।

जोड़ना कोष्टक स्पष्ट करता है, क्या होता है,

'' !== $host = $route->getHost() 
// is equal to 
'' !== ($host = $route->getHost()) 
// the other way wouldn't work 
// ('' != $host) = $route->getHost() 

तो हालत सच है अगर $route->getHost() की वापसी मान एक गैर रिक्त स्ट्रिंग है और प्रत्येक मामले में, वापसी मान $host को सौंपा गया है।

इसके अलावा, आप एक एक PHP का grammer

... 
variable '=' expr | 
variable '=' '&' variable | 
variable '=' '&' T_NEW class_name_reference | ... 

आप ऑपरेटर precendence manual पेज को ध्यान से पढ़ें, तो आप इस नोटिस

= हालांकि देखना होगा एक कम पूर्वता है देखने के लिए हो सकता था अधिकांश अन्य ऑपरेटरों की तुलना में, PHP अभी भी निम्नलिखित के समान अभिव्यक्तियों की अनुमति देगा: यदि (! $ a = foo()), में जो मामला foo() का वापसी मान $ ए में डाल दिया जाता है।

+2

इसी कारण वर्डप्रेस कोडिंग मानकों का उपयोग [yoda स्थितियां] (https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/#yoda-conditions) –

+0

धन्यवाद - यह मेरा अनुमान था लेकिन इसे दस्तावेज़ों में नहीं मिला –

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