2008-09-29 12 views
120

ऐसा लगता है कि फ़ंक्शंस नाम के तरीके के लिए कोई वास्तविक पैटर्न नहीं है, str_replace, strrpos, strip_tags, स्ट्रिप्सलाश कुछ ही हैं।PHP में निर्मित फ़ंक्शंस इतनी यादृच्छिक रूप से क्यों नामित हैं?

ऐसा क्यों है?

संपादित करें - यह "ट्रोल" प्रकार पोस्ट के रूप में नहीं था - बस कुछ ऐसा जो मुझे लगता है कि जब भी मैं भाषा का उपयोग करता हूं!

+12

मैं उन लोगों से असहमत हूं जिन्होंने इसे वोट दिया था। यह एक वैध सवाल है। और यहां दिए गए उत्तरों खराब डेवलपर्स को PHP में नामकरण अजीबता को सहन करने में मदद करने के लिए एक लंबा सफर तय कर सकते हैं। –

+2

डाउनवॉट्स एक ताड़ कठोर ठीक है - अनियमित नामकरण सम्मेलन और तर्क पुन: आदेश ने मुझे – ConroyP

+1

से अधिक बार स्थानांतरित कर दिया है PHP डेवलपर्स का एक निश्चित खंड है जो कभी भी किसी को भी 'उनकी' भाषा पर सवाल नाराज हो जाता है। वे किसी भी प्रश्न को कम वोट देते हैं जो PHP में त्रुटियों का खुलासा करता है। – iconoclast

उत्तर

84

PHP भाषा कुछ हद तक व्यवस्थित हो गई है, इसलिए कार्यों का नाम भागों में खतरनाक है। कई अलग-अलग प्रारूप पीछे-संगतता कारणों के लिए बनाए रखा गया है।

थोड़ा सा दमन, लेकिन फ़ंक्शन नामकरण के मुद्दों के अलावा, भाषा के जैविक विकास का एक और दुर्भाग्यपूर्ण दुष्प्रभाव तर्क आदेश में एक स्पष्ट असंगतता है, उदाहरण के लिए कार्यों पर विचार in_array और strstr:

bool in_array (mixed $needle, array $haystack [, bool $strict]) 

string strstr (string $haystack, mixed $needle [, bool $before_needle=false]) 

काफी मजेदार है, पीएचपी कि इन orderings सभी स्ट्रिंग कार्यों $haystack, $needle उपयोग करने के लिए है, जबकि सरणी कार्यों दूसरी तरह के आसपास हैं लगते हैं के साथ आंतरिक रूप से संगत प्रतीत हो रहा है, लेकिन इसमें कुछ समय लग सकता है PHP के लिए नए किसी के लिए इस्तेमाल करने का। इस विशेष क्विर्क के बारे में अधिक जानकारी के साथ-साथ discussion on the PHP bugs list पर एक अच्छा post on ExpressionEngine बात कर रहा है।

समारोह के नाम हमेशा एक छोटा अक्षर से प्रारंभ होना चाहिए: Zend Framework Documentation से -

भाषा परिपक्व होने के साथ, वहाँ एक और अधिक कठोर और लगातार नामकरण परंपरा को लागू करने के लिए विभिन्न प्रयास कर रहे हैं। जब एक फ़ंक्शन नाम में एक से अधिक शब्द होते हैं, तो प्रत्येक नए शब्द का पहला अक्षर पूंजीकृत होना चाहिए। इसे आमतौर पर "ऊंटकेस" स्वरूपण कहा जाता है।

filterInput()

getElementById()

एक अलग नज़र के लिए, 20 possible reasons why PHP function names and parameters are weird से:

  • पीएचपी गोंद एपीआई और मनुष्य एक साथ, और कभी कभी यह हो जाता है गंदा

  • PHP कार्यों को कई परिस्थितियों में विकसित किया गया है, सोम etimes नशे

  • पीएचपी समारोह नामकरण एल्गोरिथ्म अभी भी एक रहस्य बना हुआ है और फटा नहीं किया जा सकता

  • पीएचपी लोग शिकायत करने के लिए/ब्लॉग/हंसी कुछ मज़ा देने का फैसला किया बारे में

  • पीएचपी

    हल करने के लिए अन्य समस्या है
+12

"PHP कार्यों को कई परिस्थितियों में विकसित किया गया है, कभी-कभी नशे में पड़ता है।" mysql_real_escare_string अच्छा उदाहरण हो सकता है। WTF !? – ciscocert

+2

बस इसके बारे में सोचा, लेकिन कार्बनिक प्राणियों द्वारा बनाए जाने पर PHP * * अकार्बनिक रूप से कैसे बढ़ सकता है? xD –

+0

@ciscocert: कारण का एक हिस्सा यह है कि, उस समय नामस्थान नहीं होने के कारण, प्रैक्टिस 'mysql' को फ़ंक्शन नामों में जोड़ना था। –

1

भाषा का एक बहुत से अधिक पश्च संगतता के लिए revs

+2

क्या हम पुराने शैली वाले लोगों को नए लोगों के उपनाम के रूप में छोड़कर एक नया मानक परिभाषित नहीं कर सकते हैं? –

+0

निश्चित रूप से, वे कर सकते थे।लेकिन लागत शायद –

8

पिछड़ों संगतता और नामस्थान का अभाव है, भाषा मंथन के साथ मिलकर।

8

क्योंकि पिछले 14 वर्षों में भाषा 'पर्सनल होम पेज' से सबसे लोकप्रिय वेबसाइट कार्यान्वयन भाषाओं में से एक में बढ़ी है। इन सभी कार्यों के लिए कोई भी योजनाबद्ध नहीं है; उन्हें एक समय में एक जोड़ा गया था।

+1

के लाभ से अधिक है यदि * किसी भी * विचार को शुरुआत में स्थिरता के लिए दिया गया था, तो ऐसा नहीं होता। 14 वर्षों से बढ़ने के बारे में कुछ भी नहीं है जो इस तरह की लापरवाही को मजबूर करता है। – iconoclast

0

यह थोड़ा ट्रोल-वाई लगता है। हालांकि, यह पिछड़ा संगतता के लिए है।

PHP6 इन मुद्दों को हल करने के साथ-साथ पूर्ण यूटीएफ -8 समर्थन लाने में मदद करेगा।

0

PHP एक "पुरानी", तेजी से बढ़ती, खुली स्रोत स्क्रिप्ट भाषा है। नामकरण सिर्फ लंबे इतिहास का मामला है ... जावा के पीछे एसयूएन जैसे PHP के पीछे कोई "अकादमिक" कंपनी नहीं है, जो नामकरण को नियंत्रित करता है ...

+0

यह पूरी तरह से सच नहीं है। जेन PHP के हाल के निर्माण में एक बड़ा योगदानकर्ता रहा है और PHP 4 के बाद से इसे ज़ेंड इंजन पर बनाया गया है। वास्तव में, ज़ेंड को डेवलपर्स द्वारा शुरू किया गया था जो PHP 3 को फिर से लिखते हैं। – Wilco

23

ऐतिहासिक रूप से कई फ़ंक्शन सीधे C समकक्षों के प्रत्यक्ष मानचित्र हैं , इसलिए PHP में बहुत सारे नामकरण और तर्क-आदेश अजीबता के कारण है।

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

5

उत्तर या तो विकास या अनजान डिज़ाइन है। मुझे यकीन नहीं है कि कौन सा;)

0

प्रारंभ में PHP केवल ऑब्जेक्ट उन्मुख समर्थन (PHP 3) के साथ एक स्क्रिप्टिंग भाषा थी, इसलिए संस्करण 3 और 4 तक PHP में उपयोग किए जाने वाले फ़ंक्शन नाम अधिकतर PERL वाक्यविन्यास से प्रेरित होते हैं। लेकिन PHP 5 में बहुत सी ओओ विशेषताएं हैं जैसे प्रतिबिंब, प्रकार संकेत, इंटरफ़ेस, एक्सेस संशोधक और सूची जारी है। इनमें से अधिकतर नई सुविधाएं जावा से प्रेरित हैं। उदाहरण के लिए; कार्यान्वयन इंटरफ़ेस और विरासत वर्ग PHP और जावा में समान हैं। इसलिए, उनके नामकरण शैलियों और सम्मेलनों के साथ नए कार्यों में से अधिकांश जावा आधारित हैं। कोई इसे एक स्क्रिप्टिंग भाषा के PHP के विकास को एक थोड़ी मजबूत ओओ भाषा में बुला सकता है।

0

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