PHP ऐरे उदाहरण एक अनुगामी कोमा को क्यों छोड़ते हैं?


80

मैंने निम्नलिखित जैसे उदाहरण देखे हैं:

$data = array(
   'username' => $user->getUsername(),
   'userpass' => $user->getPassword(),
   'email' => $user->getEmail(),
);

हालांकि, व्यवहार में मैंने हमेशा ट्रेलिंग कॉमा को नहीं छोड़ा है। क्या मैं कुछ गलत कर रहा हूं, या यह करने का सिर्फ एक और 'तरीका' है? अगर मैं एक फ्रेमवर्क का उपयोग कर रहा था तो अनुगामी अल्पविराम कोड पीढ़ी को नकारात्मक रूप से प्रभावित नहीं करेगा? मैंने अन्य भाषाओं (जावा, C ++) में सरणी घोषणाओं में अनुगामी अल्पविरामों के उपयोग को देखा है, इसलिए मुझे लगता है कि अनुगामी अल्पविराम छोड़ने के कारण PHP के लिए विशिष्ट नहीं हैं, लेकिन इसने मेरी रुचि को बढ़ा दिया है।


1
जब मैंने PHP में प्रशिक्षण अल्पविराम छोड़ दिया तो मुझे शपथ मिल सकती थी।
लोटस नोट्स

यह संभव है, मुझे लगता है। इस विशेष उदाहरण में यह ठीक है।
ashurexm

हाँ @LotusNotes मुझे यकीन है कि मुझसे पहले भी त्रुटियाँ हुई हैं। लेकिन स्पष्ट रूप से, अब और नहीं!
मीज़ान-उद-दीन

जवाबों:


109

PHP ऐरे उदाहरण एक अनुगामी कोमा को क्यों छोड़ते हैं?

क्योंकि वे कर सकते हैं। :) सरणी राज्यों के लिए PHP मैनुअल प्रविष्टि :

अंतिम परिभाषित सरणी प्रविष्टि के बाद अनुगामी अल्पविराम होना, जबकि असामान्य है, एक मान्य वाक्यविन्यास है।

गंभीरता से, यह पूरी तरह से सुविधा के लिए है, ताकि आप आसानी से सरणी में एक और तत्व जोड़ सकते हैं बिना पहले अंतिम प्रविष्टि में अनुगामी अल्पविराम जोड़ सकते हैं।

अन्य भाषाओं का बोलना: जावास्क्रिप्ट में इसके साथ सावधान रहें। कुछ पुराने ब्राउज़र एक त्रुटि फेंक देंगे, हालांकि नए लोग आमतौर पर इसकी अनुमति देते हैं।


1
यह वही है जो मुझे लगा, मुझे यकीन नहीं था कि मैं नाव को किसी चीज़ से याद कर रहा हूं। मैं उन लोगों के लिए अनुमान लगाता हूं जो अपना समय कुछ भाषाओं में बिताते हैं जो इसकी अनुमति देते हैं, यह शायद एक अच्छी आदत है। लेकिन यह देखते हुए कि मैं कई अलग-अलग भाषाओं के साथ काम करता हूं, और जैसा कि आपने कहा कि जावास्क्रिप्ट (और कौन सी अन्य भाषाएं जानता है) त्रुटियां फेंक सकता है, मेरे लिए यह आसान हो सकता है कि मैं अपनी गलत आदत छोड़ने की आदत न छोड़ूं।
ऐशुरेक्स

7
जावास्क्रिप्ट के नए संस्करण IE6 / 7 कोड की तुलना में स्पष्ट रूप से इसकी अनुमति देते हैं, अब।
स्टेटिक्सन

9
पर्ल अनुगामी अल्पविराम की भी अनुमति देता है, और मेरा मानना ​​है कि यह प्रोत्साहित किया गया है। स्रोत नियंत्रण का उपयोग कर डेवलपर्स के बीच कोड साझा करते समय यह वास्तव में बहुत अच्छा है। यदि आप अंत तक एक पंक्ति जोड़ना चाहते हैं और आपको अल्पविराम जोड़ने की आवश्यकता है, तो इसका मतलब है कि आप दोनों पंक्तियों को छू रहे हैं। A git blame(या अन्य स्रोत नियंत्रण में समतुल्य) दिखाएगा कि आपने वह पंक्ति लिखी है, भले ही आपने इसमें केवल एक अल्पविराम जोड़ा हो। किसी भी तरह से बहुत बड़ा सौदा नहीं है लेकिन आसान है।
Redbmk

2
यदि आपके पास स्रोत-नियंत्रण के तहत फाइल है तो यह उपयोगी है कि बदली हुई लाइनों की संख्या कम रखें।
हकर्रे

6
JSON भी, JSON को कमिंग ट्रेल से नफरत है।
केली हॉचकिस

27

यह कई लाइनों पर सरणी को परिभाषित करते समय एक अच्छा अभ्यास है। यह ZendFramework के कोडिंग मानकों द्वारा भी प्रोत्साहित किया जाता है :

इस बाद की घोषणा का उपयोग करते समय, हम सरणी में अंतिम आइटम के लिए अनुगामी अल्पविराम का उपयोग करने के लिए प्रोत्साहित करते हैं; यह क्रमिक लाइनों पर नई वस्तुओं को जोड़ने के प्रभाव को कम करता है, और यह सुनिश्चित करने में मदद करता है कि गायब अल्पविराम के कारण कोई भी त्रुटि नहीं हो।


23

मैंने देखा कि जब संस्करण नियंत्रण (git) के साथ काम कर रहा था कि अगर हम किसी सरणी में 1 चीज़ जोड़ते हैं और हमारे पास अनुगामी अल्पविराम नहीं है, तो यह ऐसा दिखेगा जैसे हमने 2 पंक्तियों को संशोधित किया है क्योंकि अल्पविराम को पिछली पंक्ति में जोड़ा जाना था। मुझे लगता है कि यह बुरा लग रहा है और फ़ाइल में बदलाव को देखते हुए भ्रामक हो सकता है, और इस कारण से मुझे लगता है कि एक अनुगामी अल्पविराम एक अच्छी बात है।


और वह निश्चित रूप से, क्यों
कमिंग ट्रेल्स के

मुझे नहीं पता कि इसका कोई लेना-देना क्यों है। मुझे लगता है कि नहीं होगा। लेकिन मुझे यह उपयोगी लगता है।
user985366

लेकिन उस है कारण है कि यह यहाँ है। कोई यह कह सकता है कि अगली पंक्ति में गलतियों को रोकने के लिए यह यहाँ है। लेकिन ऐसा नहीं है, क्योंकि कोई भी आईडीई अब आपको बिना कॉमे के लाइनों को जोड़ने की अनुमति नहीं देगा, यह एक त्रुटि नोटिस पॉप करेगा।
निन्ज

@ निनज रोचक। मैंने आपकी पहली टिप्पणी विडंबना के रूप में ली थी, लेकिन मुझे यकीन नहीं था।
user985366

1
क्षमा करें, यह विडंबनापूर्ण लग सकता है। यह बहुत गंभीर था। हम अंतिम सरणी लाइन पर अल्पविराम जोड़ते हैं ताकि संस्करण साफ होने में मदद कर सके।
निन्ज

8

क्योंकि यह प्रविष्टियों को एक समान रखता है।

यदि आपको ऑर्डर स्वैप करना है, या प्रविष्टियों को जोड़ना या हटाना है, तो आप जानते हैं कि एक अनुगामी अल्पविराम छोड़ना बहुत सुविधाजनक है।

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

अंतिम तत्व पर एक अनुगामी अल्पविराम की अनुमति देकर, यह प्रोग्रामर को इस कष्टप्रद और फलहीन विस्तार की ओर ले जाने से मुक्त करता है।


6

कारण है प्रतिबद्ध परिवर्तन।

यदि आपको नया तत्व जोड़ते समय अनुगामी अल्पविराम जोड़ना है। आप 1 पंक्ति बदल रहे हैं और 1 पंक्ति जोड़ रहे हैं। (- ++)

एक नया तत्व जोड़ने पर जब एक अल्पविराम पहले से ही ऊपर की रेखा में है। केवल 1 जोड़ा लाइन है, और कोई भी परिवर्तित नहीं है। (+)


5

मैं अन्य लोगों के लिए नहीं बोल सकता, लेकिन मैं आमतौर पर अपने कोड में एक अनुगामी अल्पविराम छोड़ता हूं। मैं ऐसा इसलिए करता हूं क्योंकि अगर / जब मैं बाद में सरणी में जोड़ता हूं, तो मुझे उस अल्पविराम को याद करने के बारे में चिंता करने की ज़रूरत नहीं है, जो पिछली पंक्ति में एक अल्पविराम जोड़ने के लिए भूल जाने के कारण था।


4

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


3

मैं हमेशा अल्पविराम का अनुगमन कर रहा हूं क्योंकि यह नए सरणी तत्वों को जोड़ते समय वाक्यविन्यास त्रुटियों से बचने में मदद करता है ... यह सिर्फ एक अच्छा अभ्यास है।


3
मुझे इसे पुनर्जीवित करने के लिए खेद है लेकिन, बाद में एक अनुगामी अल्पविराम वाक्यविन्यास त्रुटियों को कैसे रोकता है? मुझे अभी पता चला है कि PHP अनुगामी अल्पविराम के लिए अनुमति देता है - लेकिन मैं इसके लिए उपयोग नहीं देख / पा सकता हूं। नए इंडेक्स को बाद में जोड़ना अभी भी के माध्यम से किया जाता है $arr[] = ...
डैनियल

@ डैनियल, वह बाद में स्रोत कोड पर लौटने और सरणी शाब्दिक में एक और पंक्ति जोड़ने के बारे में बात कर रहा है।
सैम डुफेल

1

यदि आप राउंड क्यूब फ़ाइल कॉन्फ़िग (config.inc.php) का एक उदाहरण देखते हैं, तो उनके पास अल्पविराम के साथ और बिना उदाहरण हैं।

यह सरणी परिभाषित करती है कि प्लग इन को सक्षम या अक्षम किया जाना चाहिए:

...
// List of active plugins (in plugins/ directory)
$config['plugins'] = array(
'managesieve',
'password',
'archive',
'zipdownload',
);
...

आम तौर पर, यह लाइन से लाइन होगी और अगर कोई सरणी पर कुछ जोड़ना चाहता है, तो वे ऐसा कर सकते हैं:

...
// List of active plugins (in plugins/ directory)
$config['plugins'] = array(
'managesieve', //code by personA
'password', //code by personA
'archive', //code by personA
'zipdownload', //code by personA
'newplugin', //new code by personB
);
...

इसलिए, जब वे इस कोड को करते हैं, तो उन्हें उस विशेष लाइन के लिए केवल एक परिवर्तन दिखाई देता है और यह निरीक्षण करते समय अधिक पठनीय होता है कि उस विशेष लाइन के लिए कोड परिवर्तन कौन कर रहा है।

कोड की दूसरी पंक्ति में आप इसे अल्पविराम के बिना देख सकते हैं:

...
$config['default_folders'] = array('INBOX', 'Drafts', 'Sent', 'INBOX.spam', 'Trash');
...

आम तौर पर यह कोड की एक एकल पंक्ति होगी जहां कोई भी इस कोड को अक्सर बदले जाने की उम्मीद नहीं करता है।

दूसरे शब्दों में:

1) यदि कोई विकल्प या कॉन्फ़िगरेशन फ़ाइल के रूप में उपयोग किया जाता है, तो अनुगामी अल्पविराम लगाएं, जिसे भविष्य में गतिशील रूप से बदलना पड़ सकता है। इसके अलावा, यदि आप प्रोग्रामिंग में अल्पविराम का उपयोग करके उस सरणी में बदलाव करते हैं तो आप केवल एक लाइन कोड में बदलाव करते हैं, जबकि इसके बिना, आपको 2 लाइन कोड से निपटना होगा और यह सरणी को पार्स करने के लिए अधिक जटिलता का कारण बन सकता है।

2) आपको अनुगामी अल्पविराम लगाने की ज़रूरत नहीं है यदि सरणी एक निरंतर सरणी है और आप इसे भविष्य में बदलने की उम्मीद नहीं करते हैं लेकिन जैसा कि स्वीकृत उत्तर द्वारा उल्लेख किया गया है, आप अनुगामी अल्पविराम लगा सकते हैं लेकिन इसका कोई उद्देश्य नहीं है


0

इसने मुझे हाल ही में चौंका दिया, लेकिन यह समझ में आता है। मैंने लंबे समय से पहले के सम्मेलन का पालन करने की कोशिश की है जो एक ही चीज को पूरा करता है, जो कि अंत में के बजाय प्रत्येक प्रविष्टि के सामने अलग-अलग अल्पविराम लगाने के लिए है ।

$data = array(
   'username' => $user->getUsername()
 , 'userpass' => $user->getPassword()
 , 'email' => $user->getEmail()
);

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


0

मैंने हमेशा नई प्रविष्टि की शुरुआत में अल्पविराम जोड़ा है। कंपाइलर इसे लुक-फॉरवर्ड के एकल-चरित्र टोकन के रूप में देखते हैं जो कहते हैं कि "एक और एक आ रहा है"। मुझे नहीं पता कि आधुनिक संकलक LR (1) (लेफ्ट-रिकर्सिव, सिंगल टोकन लुक-फ़ॉरवर्ड) का उपयोग करते हैं, लेकिन मुझे लगता है कि सिंटैक्स त्रुटि तब उत्पन्न होती है जब अल्पविराम के बाद कुछ भी नहीं होता है। यह दुर्लभ है कि मैंने कभी किसी अन्य डेवलपर के साथ मेरी सहमति व्यक्त की है, लेकिन ऐसा लगता है कि जॉनब्रुकिंग करता है!

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