उप्पेरेज़ बूलियन्स बनाम लोअरकेस इन पीएचपी


135

जब मैं PHP सीख रहा था, मैंने कहीं पढ़ा कि आपको हमेशा बूलियन्स के ऊपरी केस संस्करणों का उपयोग करना चाहिए, TRUEऔर FALSE, क्योंकि "सामान्य" लोअरकेस संस्करण, trueऔर false, उपयोग करने के लिए "सुरक्षित" नहीं थे।

अब कई साल हो गए हैं, और मैंने जो भी PHP स्क्रिप्ट लिखी है वह अपरकेस संस्करण का उपयोग करती है। अब, हालांकि, मैं यह सवाल कर रहा हूं, क्योंकि मैंने लोअरकेस संस्करण (यानी ज़ेंड फ्रेमवर्क) के साथ बहुत सारे PHP को लिखा है।

क्या / कभी अपरकेस संस्करण का उपयोग करने का कोई कारण था, या क्या लोअरकेस का उपयोग करना पूरी तरह से ठीक है?

संपादित करें: यह उल्लेख करना भूल गए कि यह NULLऔर nullसाथ ही लागू होता है ।


4
ऐसी कई साइटें हैं जो कहती हैं कि इसे लिखना कम समझे जाने वाला "बहुत तेज़" है, लेकिन बिना किसी गंभीर स्रोतों का हवाला दिए। देखने के इच्छुक हैं कि क्या कुछ आता है।
पेका

2
यह सच नहीं है। मैंने इसे 5M पुनरावृत्तियों के साथ परीक्षण किया और उन दोनों ने समान परिणाम दिए, मेरे पीसी पर 0.5s: P
एलेक्स

9
@ एलेक्स पेक्का का मतलब यह भी हो सकता है कि लोअरकेस बूलियन्स का वास्तविक लेखन तेजी से हो। यह समझ में आता है, कम कुंजियों का उपयोग करना। हालांकि यह अंतर छोटा है।
मार्टीन लाईन

क्षमा करें, आपके द्वारा मतदान करने के बाद मैंने गलती से वोट कर दिया।
SIFE

1
एक दिलचस्प अवलोकन: var_export () लोअरकेस के रूप में सही और गलत लिखता है, लेकिन NULL अपरकेस के रूप में। लवली, एह? 3v4l.org/6Oelk
donquixote

जवाबों:


89

आधिकारिक पीएचपी मैनुअल का कहना है:

बूलियन शाब्दिक निर्दिष्ट करने के लिए, TRUE या FALSE कीवर्ड का उपयोग करें। दोनों केस-असंवेदनशील हैं।

तो हाँ, true === TRUEऔर false === FALSE

व्यक्तिगत रूप से, तथापि, मैं पसंद TRUEसे अधिक trueऔर FALSEअधिक falseपठनीयता कारणों के लिए। यह प्रयोग पर मेरी प्राथमिकता के लिए एक ही कारण नहीं है ORसे अधिक orया ||, और प्रयोग पर ANDअधिक andया &&

PSR-2 मानक की आवश्यकता है true, falseऔर nullलोअर केस में किया जाना है।


81
बस का कहना है कि करना चाहते हैं ORऔर ||PHP में विभिन्न ऑपरेटरों रहे हैं (में के रूप में वे अलग पूर्वता है), के रूप में कर रहे हैं ANDऔर &&। (उदाहरण के लिए &&और ||काम ऑपरेटरों की तुलना में अधिक पूर्वता हैं, लेकिन ORऔर ANDनहीं कर रहे हैं।)
Johrn

21
इसके अलावा आज के आईडीई के साथ मैं सबसे ऊपरी आईडीई के अलग-अलग भेद के लिए सिंटेक्स हाइलाइटर के रूप में शुद्ध ऊपरी-केस बूलियन होने का कारण नहीं देखता।
राबर्टपिट

37
मैं बहुत उन्हें लोअरकेस टाइप करना पसंद करता हूं इसलिए मुझे शिफ्ट की को पकड़ना नहीं पड़ता है।
ckक

6
मुझे लोअर केस भी पसंद है - जैसे जावा में, लेकिन हर एक को अपना। मैं चाहूंगा कि वे एक ही रास्ते पर बस जाएं और हम सभी को एक या दूसरे में बदल दें !!!!! यह वास्तव में मेरे लिए एक लचीलापन नहीं है!
रे

5
@ साइरिल: पीएचपी से नफरत करने के बहुत सारे अच्छे कारण हैं (उदाहरण के लिए, जोहर ने ऊपर उल्लेख किया है, मुझे नहीं पता कि मुझे एक के लिए पता था), लेकिन यह देखते हुए कि यह मूल रूप से असंवेदनशील है, मिश्रित मामले में कुछ भी अजीब नहीं है। भाव समान हैं। क्या है बकवास, हालांकि यह है कि यह घुलमिल सामान्य असंवेदनशीलता के साथ मामला संवेदनशीलता और केस-असंवेदनशीलता,। (उदाहरण देखें: stackoverflow.com/questions/5643496/… )
Sz।

110
define('TRUE', false);
define('FALSE', true);

खुश डिबगिंग! (PHP < 5.1.3 (2 मई 2006) , डेमो देखें )

संपादित करें: अपरकेस बस्ट्स स्थिरांक हैं और लोअरकेस मूल्य हैं। आप मूल्य में रुचि रखते हैं, निरंतर में नहीं, जो आसानी से बदल सकते हैं।


Eliminated run-time constant fetching for TRUE, FALSE and NULL

author      dmitry <dmitry>
            Wed, 15 Mar 2006 09:04:48 +0000 (09:04 +0000)
committer   dmitry <dmitry>
            Wed, 15 Mar 2006 09:04:48 +0000 (09:04 +0000)
commit      d51599dfcd3282049c7a91809bb83f665af23b69
tree        05b23b2f97cf59422ff71cc6a093e174dbdecbd3
parent      a623645b6fd66c14f401bb2c9e4a302d767800fd

करता d51599dfcd3282049c7a91809bb83f665af23b69 (और 6f76b17079a709415195a7c27607cd52d039d7c3 )


7
-1 क्योंकि ए) यह व्यर्थ है। बी) यह सवाल का जवाब नहीं देता है। और सी) मैंने पहले ही सही उत्तर स्वीकार कर लिया है, और यह कोई अतिरिक्त सहायक जानकारी प्रस्तुत नहीं करता है ।
ऑस्टिन हाइड

36
फिर मुझे विस्तार से समझाएं: अपरकेस बन्स लगातार हैं और लोअरकेस मान हैं। आप मूल्य में रुचि रखते हैं, निरंतर में नहीं, जो आसानी से बदल सकते हैं। इसलिए, यदि आपने पाठ पर थोड़ा विचार किया होगा और जुर्माना देने में जल्दबाजी नहीं की होगी, तो आप शायद यह समझ गए होंगे।
रादु

13
मैं समझ रहा हूं कि आप (अब) जो बिंदु बना रहे हैं, लेकिन मूल रूप से आपने इसे (IMO) गुप्त और व्यर्थ बनाया है। अगर आपने मूल रूप से सिर्फ अपना उत्तर संपादित किया था, तो मुझे बहुत ही अच्छा लगा होगा, क्योंकि यह वास्तव में एक बहुत अच्छा बिंदु है।
ऑस्टिन हाइड

4
यह सही जवाब है। इसके लिए अंक प्राप्त करने चाहिए थे।
सीरियलवर्म

22
संपादन के लिए, यह वर्णन थोड़ा भ्रामक है ... वास्तविक मूल्य स्वयं (जो टोकन T_NULLमें T_TRUE, और T_FALSEपार्स समय में संकलित हो जाते हैं), केस-असंवेदनशील हैं, इसलिए उपयोग NULLकरना वास्तव में "स्थिर" नहीं है --- जब तक आप बनाने के लिए यह एक निरंतर, का उपयोग करते हुए define()। बस का उपयोग करना NULLया TRUEइसका मतलब यह नहीं है कि यह एक स्थिरांक है, जैसे कि ऐसा कोई स्थिरांक नहीं है, PHP इसे शाब्दिक के रूप में व्याख्या करता है। एक अधिक सटीक विवरण यह है कि लोअरकेस संस्करणों को फिर से परिभाषित नहीं किया जा सकता है, जबकि किसी भी अन्य मामले में भिन्नता हो सकती है
जो

31

लोअरकेस का उपयोग करें।

  1. टाइप करना आसान है। (IMO)
  2. पढ़ना आसान है। (IMO)
  3. जावास्क्रिप्ट बूलियन लोअरकेस और केस-सेंसिटिव हैं।

6
+1; मैं जावास्क्रिप्ट तर्क को जोड़ने के बारे में था: जैसा कि PHP और JS कोड दोनों को लिखने के लिए वेब प्रोग्रामिंग में यह बहुत ही सामान्य है, अच्छी तरह से विकसित वेब विकास उंगली की मांसपेशियों को अंतिम भाषा के संदर्भ में उपयोग किए गए एक ही पत्र मामले को नियमित रूप से लागू करना जारी है। PHP से स्विच करने के बाद कम से कम मैंने अक्सर अपने आप को जावास्क्रिप्ट में TRUE या FALSE लिखना पाया। PHP में लोअर केस का उपयोग करके इसे अच्छे के लिए तय किया गया है।
एस.जे.

11

यदि आप JSON का उपयोग करने का इरादा रखते हैं, तो RFC7159 कहते हैं:

शाब्दिक नाम MUST लोअरकेस होना चाहिए। किसी अन्य शाब्दिक नाम की अनुमति नहीं है।

PHP 5.6 में पिछड़े असंगत परिवर्तन की सूची से :

json_d timecode () अब JSON शाब्दिक के गैर-लोअरकेस संस्करण को अस्वीकार कर देती है, जो JSON विनिर्देशन के अनुसार हर समय सही, गलत और अशक्त है।

PSR-2 मानक के अनुसार :

PHP के कीवर्ड कम केस में होने चाहिए।

PHP स्थिरांक, गलत, और अशक्त कम मामले में होना चाहिए।


सही है, लेकिन यह सवाल विशेष रूप से PHP में ऊपरी / निचले गुच्छों के संबंध में था , JSON नहीं। उदाहरण के लिए, उपज json_encode(TRUE)और json_encode(true)उपज दोनों 'true'
ऑस्टिन हाइड

3
JSON का उल्लेख करने के लिए क्षमा करें, क्या यह बेहतर होगा यदि मैंने उन सभी संदर्भों को हटा दिया और केवल PSR-2 का उल्लेख किया?
विषैला पौधा

4
मुझे लगता है कि JSON का संदर्भ उचित है, क्योंकि आप अक्सर PHP के साथ जावास्क्रिप्ट / JSON का उपयोग करते हैं, और निरंतरता की तलाश में हो सकते हैं।
डग क्रेस

9

जब तक मैं पीएसआर बैंडवागन पर नहीं आया, तब तक मैं सभी कैप की तरह सी स्टाइल ट्रू / एफएलएसई बूलियन करता था ।

PSR-2 की धारा 2.5:

PHP स्थिरांक, गलत, और अशक्त कम मामले में होना चाहिए।

मूल रूप से, यदि आप खुले स्रोत शैली विशेष के साथ अच्छा खेलना चाहते हैं, तो बूलियन्स को कम मामला होगा।


5

इससे कोई फर्क नहीं पड़ता, trueबिल्कुल वैसा ही है TRUE। उसी के लिए चला जाता है falseऔर null। मैंने नहीं सुना है कि यह किसी भी बिंदु पर मायने रखता होगा।

एक ही तरीका है कि आप चीजों को गड़बड़ कर सकते हैं, उदाहरण के लिए उन मूल्यों को उद्धृत करके:

$foo = false;   // FALSE
$bar = "false"; // TRUE

$foo2 = true;   // TRUE
$bar2 = "true"; // TRUE

$foo3 = null;   // NULL
$bar3 = "null"; // TRUE

केवल ऊपरी या निचले हिस्से का उपयोग करने के लिए आपको प्रतिबंधित या प्रोत्साहित करने वाली चीज़ आपकी कंपनी या आपकी स्वयं की कोडिंग दिशानिर्देश हो सकती है। इसके अलावा, आप या तो एक का उपयोग करने के लिए स्वतंत्र हैं और यह किसी भी मुद्दे में नेतृत्व नहीं करेगा।


FALSE और NULL एक जैसे नहीं हैं। यदि मूल्य === FALSE है तो is_null () सही नहीं है।
नोआ गुडरिच

9
@ नोहा गुडरिच, मैं किसी भी बिंदु पर ऐसा नहीं करता था falseऔर nullऐसा ही होगा। मैंने कहा कि "वही जाता है falseऔर null", जिसका अर्थ था कि दोनों को कम या बड़े अक्षरों में व्यक्त किया जा सकता है।
तातु उलेमेन

5

मैंने झूठे और FALSE के बीच अंतर की जांच करने के लिए सरल कोड लिखा है : प्रत्येक पुनरावृत्ति कुछ ऐसा कर रही थी:

    for ($i = 0; $i < self::ITERATIONS; ++$i) {
       (0 == FALSE) ;
    }

यहाँ परिणाम हैं:

Iterations: 100000000
using 'FALSE': 25.427761077881 sec
using 'false': 25.01614689827 sec

तो हम देख सकते हैं कि बूलियंस मामले से प्रदर्शन बहुत थोड़ा छू जाता है - लोअरकेस तेजी से होता है। लेकिन निश्चित रूप से आप नहीं देखेंगे।


क्या है जेएस इंजन? आजकल जेएस को निष्पादन से पहले स्मृति में संकलित किया गया है।
तिबेरिउ-आयनो स्टेन

1
निष्पादन से पहले PHP को टोकन दिया जाता है, और समय में कोई अंतर नहीं होना चाहिए। एक अन्य उत्तर ने संकेत दिया कि ऊपरी तेजी थी। किसी भी परीक्षण में इस परिमाण के अंतर को नजरअंदाज किया जाना चाहिए - यह अंतर 2.5e-7 प्रति पुनरावृत्ति है।
डग क्रेस

4

व्यक्तिगत रूप से मैंने हमेशा लोअरकेस फॉर्म का उपयोग किया है, लेकिन किसी विशेष कारण से मेरे कोड को सुव्यवस्थित बनाने के अलावा, मैं केवल बड़े अक्षरों का उपयोग करता हूं वह है जब ऊंट आवरण वर्ग के नाम और चर नाम।

अपरकेस का उपयोग करने का एक फायदा जो मन में आता है, हालांकि यह है कि वे बाहर चिपके रहते हैं और कोड में आसानी से मिल जाते हैं।


2
Tidy-ness के लिए +1। सभी कैप्स परंपरा सी से आती है, लेकिन यह समय है जब हम उस बदसूरत रूप से छुटकारा पा लेते हैं।
पेट्रूजा

2

मैं अपने आप से एक ही बात पूछते हुए इस पुराने सवाल पर आया। परिभाषित के साथ अच्छा बिंदु ('TRUE', गलत); परिभाषित ('FALSE', सत्य); हालांकि php5 पर लागू नहीं होता है। Php5 कोड में उन पंक्तियों को लिखना एक टिप्पणी लिखने जैसा है।


6
भविष्य के संदर्भ के लिए, आपने इसे "उत्तर" के रूप में पोस्ट किया है। StackOverflow पर, पारंपरिक मंचों के विपरीत, संवादी पोस्ट जो वास्तव में प्रश्न के समाधान के रूप में काम नहीं करते हैं और सहायक जानकारी प्रदान नहीं करते हैं, को मूल प्रश्न या प्रासंगिक उत्तर के लिए एक टिप्पणी के रूप में पोस्ट किया जाना चाहिए। इस मामले में, आपकी पोस्ट मेरे सवाल पर एक उत्तर की तुलना में एक टिप्पणी के लिए बेहतर होगी।
ऑस्टिन हाइड

8
वास्तव में यह जानना उपयोगी है कि यह PHP 5: P
एलेक्स

1

यहाँ विंडोज 7x64bit अपाचे / 2.4.9 PHP / 5.5.14 पर मेरा परीक्षण है

$blockLimit = 50;
while($blockLimit > 0): $blockLimit--;

//STAR Here ================================================

$msc = microtime(true);
for ($i = 0; $i < 100000; $i++) {
   echo (FALSE);
}
echo 'FALSE took ' . number_format(microtime(true)-$msc,4) . " Seconds\r\n";
$msc = microtime(true);
for ($i = 0; $i < 100000; $i++) {
   echo (false);
}
echo 'false took ' . number_format(microtime(true)-$msc,4) . " Seconds\r\n";

echo "\r\n --- \r\n";
//Shutdown ==================================================
endwhile;

इस बार FALSE ने 20 बार जीत हासिल की। तो मेरे वातावरण में अपरकेस तेज है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.