PHP में आपके लिए कौन सी सुविधाएँ होनी चाहिए? [बन्द है]


88

चूंकि अब यह छुट्टियों का मौसम है और हर कोई इच्छाएं बना रहा है, मुझे आश्चर्य है कि आप चाहते हैं कि कौन सी भाषा सुविधाएँ PHP में शामिल होंगी? मुझे भाषा के लिए कुछ व्यावहारिक सुझावों / इच्छाओं में दिलचस्पी है। व्यावहारिक रूप से मेरा मतलब है:

  1. कुछ ऐसा जो व्यावहारिक रूप से किया जा सकता है (नहीं: "मैं चाहता हूं कि PHP यह अनुमान लगाए कि मेरे कोड का क्या मतलब है और मेरे लिए बग को ठीक करें" या "मैं चाहता हूं कि कोई भी कोड 5ms के तहत निष्पादित होगा")
  2. कुछ ऐसी चीज़ों के लिए जिसे PHP को किसी अन्य भाषा में बदलने की आवश्यकता नहीं है (नहीं: "काश वे $ संकेत छोड़ देते और ब्रेसिज़ के बजाय स्थान का उपयोग करते" या "काश PHP संकलित होता, सांख्यिकीय रूप से टाइप किया जाता और उसमें # नाम होता"।
  3. कुछ ऐसा है जिसे सभी मौजूदा कोड को तोड़ने की आवश्यकता नहीं है (नहीं: "चलो 500 कार्यों का नाम बदलें और उनके लिए पैरामीटर ऑर्डर बदलें")
  4. कुछ ऐसा है जो भाषा या इसके कुछ दिलचस्प पहलू को बदल देता है (नहीं: "मैं चाहता हूं कि एक्सवाईजेड प्रोटोकॉल के लिए समर्थन का विस्तार हो" या "मैं चाहता हूं कि बग # 12345 अंततः तय हो गए")
  5. कुछ ऐसा जो एक शेख़ी से अधिक है (नहीं: "काश PHP इतनी बुरी तरह से नहीं चूसता")

किसी को कोई शुभकामना है?

मॉड एडिट: स्टानिस्लाव मालशेव एक कोर PHP डेवलपर है।


9
@Stan: जितना आप इस तरह की टिप्पणी से बचना चाहते हैं, आप इसे वैसे भी प्राप्त करने जा रहे हैं। समस्याओं लोग है पीएचपी साथ काफी हद तक चीजें आप अपनी पोस्ट में सत्तारूढ़ बाहर कर रहे हैं की श्रेणियों में कर रहे हैं। [...]
फिशटोस्टर

24
[...] आप कह रहे हैं "हम वास्तव में चेहरे पर मार नहीं कर सकते बिना चेहरे में हिट होने के अनुभव को कैसे सुधार सकते हैं?" मेरा मतलब है, हाँ, जब हम चेहरे पर मार रहे हैं तो मुफ्त में कॉफी लेना अच्छा हो सकता है, यह वास्तव में चेहरे पर बहुत सारी अंतर्निहित समस्याओं का सामना नहीं करता है, ठीक है, चेहरे पर मारा जा रहा है। इसलिए, जब मुझे उम्मीद है कि आपको यहाँ कुछ उपयोगी उत्तर मिलेंगे (जैसा कि पहले से ही प्रतीत होता है), अनुत्पादक लोगों द्वारा आश्चर्यचकित न हों।
फिशटोस्टर

5
@ फ़िशटोस्टर: अगर PHP आपके लिए चेहरे से टकराती है, तो हर तरह से इससे दूर रहती है। आप निश्चित रूप से इसे बेहतर बनाने में रुचि नहीं रखते हैं। ऐसा तब होता है जब लोग होते हैं। यह विषय उनके लिए है, आपके लिए नहीं। मुझे यकीन है कि इस साइट में आपके लिए बहुत सारे विषय हैं, यह उनमें से एक नहीं है।
StasM

5
मैं एक उदाहरण के रूप में चेहरे पर हिट का उपयोग कर रहा हूं- ऐसी स्थिति जहां सतही सुधार महत्वपूर्ण नहीं हैं; जब ज्यादातर लोगों की समस्याएं अंतर्निहित चीज के साथ होती हैं। मैं उन सतही सुधारों के लिए सुझाव प्राप्त करने के आपके प्रयास को भी नहीं खटखटा रहा हूँ- मैं सिर्फ इशारा कर रहा हूँ कि क्यों आपको स्थिति को देखते हुए कुछ अनपेक्षित उत्तर मिलने की संभावना है।
फिशटोस्टर

6
@ फिशटोस्टर: हर कोई, आश्चर्यजनक रूप से , पीएचपी से नफरत नहीं करता है - मुझे हमेशा यह पसंद आया है। बहुत लचीला और त्वरित (कोड करने के लिए)।
परिक्रमा

जवाबों:


119

मैं नामित मापदंडों को बुरा नहीं मानूंगा।

getData(0, 10, filter => NULL, cache => true, removeDups => true);
// instead of:
getData(0, 10, NULL, true, true);

// or how about:
img(src => 'blah.jpg', alt => 'an albino platypus', title => 'Yowza!');

दुर्भाग्य से PHP देवों ने उस विचार को पहले से ही गोली मार दी थी


1
यह 2005 से सूची है। कई विचारों को बंद कर दिया गया और फिर पुनर्जन्म हुआ। वास्तव में, यदि एक अच्छा कार्यान्वयन आता है, तो एक अच्छा मौका है जिसे यह स्वीकार किया जाएगा।
StasM

21
यह मेरी पसंदीदा अजगर विशेषता है। कोड को बहुत स्व-दस्तावेजीकरण बनाता है।
कीयो

7
@ जोश के: यह ठीक है, लेकिन अगर आप करेंगे तो 'ऐरे' कॉल बेकार कचरा है। यह केवल वही करता है जो आप वास्तव में करने की कोशिश कर रहे हैं। एक अन्य विकल्प सरणियों के लिए एक शॉर्टहैंड सिंटैक्स होगा: make_img (['src' => 'blah.jpg', ...]);
एरिक वैन ब्राकेल

2
@ एरिक: यह एक बुरा विकल्प भी नहीं है, मैं कह रहा हूं कि इस अव्यवस्था को एक भाषा में क्यों जोड़ें जब आप इसे पहले से ही एक मामूली क्लिपर के साथ कर सकते हैं।
जोश के

4
@ एरिक: सरणियों के लिए अधिक आराम से वाक्यविन्यास (जैसे जावास्क्रिप्ट []ऑपरेटर) एक प्रशंसित सुविधा होगी।
जोश के

93

अधिक डीफ्रेंसिंग:

echo something_that_returns_array()[4];

दूसरों ने नामांकित पैरामीटर और छोटे सरणी सिंटैक्स का उल्लेख किया है। मैं छोटी वस्तु वाक्य रचना को भी बुरा नहीं मानूंगा।

$a1 = array(1, 2, 3, 4);
$a2 = [1, 2, 3, 4];

$b1 = (object)array('name' => 'foo');
$b2 = {'name' => 'foo'}; // or something?

18
() [] सिंटेक्स पहले से ही ट्रंक में है। दुर्भाग्य से, सरणी शॉर्टकट को अस्वीकार कर दिया गया था, लेकिन मुझे पुनरुत्थान की उम्मीद है।
StasM

2
मुझे यह सुविधा पसंद आएगी। हमारे पास कुछ क्यों हो सकता है_है।
बाला क्लार्क

4
सरणी और ऑब्जेक्ट नोटेशन जैसे जावास्क्रिप्ट रॉक करेंगे। एक फ्रंट एंड डेवलपर के रूप में जो मुझे php कोड में सबसे ज्यादा परेशान करता है।
ब्लॉप ब्लॉप

1
@DisgruntledGoat यह करता है, देखें:function something_that_returns_array() { return array( 'a', 'b', 'c', 'd', 'e' ); }
बैकस्ट्रॉम

2
@DisgruntledGoat: ()->सिंटैक्स के साथ समस्या यह है, कि यह केवल तभी काम करता है जब कोई वस्तु वापस आती है, मामलों को बदतर बनाने के लिए, वस्तु की आवश्यकता भी होती है, जिसमें निर्दिष्ट नाम की संपत्ति / विधि होती है, जो कि, आशा है कि आप क्या उम्मीद करते हैं। , जबकि आपके द्वारा दिए गए मापदंडों को स्वीकार करते हुए, और यह प्रार्थना करते हुए कि इसे किसी और की आवश्यकता नहीं है ... आदि आदि
प्रेत ०३

72

लगभग 13 वर्षों के लिए PHP के साथ काम करने के बाद, और लगभग 4 के लिए JS के साथ भारी, वहाँ कुछ चीजें हैं जो मुझे लगता है कि PHP JS से उधार लेने के लिए अच्छा होगा:

1) एरे और ऑब्जेक्ट्स के लिए शॉर्टहैंड नोटेशन। मेरा मानना ​​है कि इस पर चर्चा की गई है और इंटर्नल पर शूट किया गया है (इसलिए मैं सुनता हूं - मुझे यह देखना पसंद नहीं है कि सॉसेज कैसे बनाया जाता है), लेकिन मुझे वास्तव में, वास्तव में पता चलता है कि जेएस में सरणियों और वस्तुओं के लिए शाब्दिक संकेतन एक बड़ा है उत्पादकता जीत।

उदाहरण के लिए:

$arr     = [1,2,3,4];
$assoc   = [foo=>'bar', baz=>'boo'];
$stdobj  = {foo->'bar', baz->'boo'};

(IMHO) लिखने और क्लीनर की तुलना में बहुत आसान है

$arr     = array(1,2,3,4); // not too bad
$assoc   = array("foo"=>'bar', baz=>'boo'); // not too bad either
$stdobj  = new stdClass; // this gets pretty rough
$stdobj->foo = 'bar';
$stdobj->baz = 'boo';

मैंने सुना है कि संभावित भ्रम के बारे में कुछ चिंता जताई गई थी, लेकिन क्या वास्तव में, यह कहना, हेरेडोक नोटेशन से अधिक भ्रमित करना है? बहुत कम से कम, PHP में एक stdClass ऑब्जेक्ट बनाने के लिए पर्याप्त है अभ्यास को हतोत्साहित करना, मुझे लगता है।

2) पहले से परिभाषित कार्यों और तरीकों को फिर से परिभाषित करने में सक्षम होना वास्तव में उपयोगी होगा। यह विशेष रूप से एक वर्ग का विस्तार करने वाली स्थितियों को सरल करेगा और नए वर्ग को त्वरित रूप से जटिल या अव्यवहारिक बना देगा। मुझे लगता है कि हमें कोर / गैर-उपयोगकर्ता कार्यों और विधियों के पुनर्वितरण से बचना चाहिए, हालांकि।


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

पूछने के लिए धन्यवाद!


(२) रनकिट में देखना। (3) यूनिकोड कठिन है, विशेषकर चूंकि बाहरी दुनिया के अधिकांश यूनिकोड नहीं हैं। हमें या तो प्रदर्शन को मारना होगा या लोगों को बहुत सारे अतिरिक्त काम करने की आवश्यकता होगी (जैसे जावा करता है)। यही कारण है कि php6 यूनिकोड प्रयास काम नहीं किया।
StasM

8
यूनिकोड के रूप में: यह कठिन हो सकता है, लेकिन यह बड़े पैमाने पर उपयोगी होगा (निश्चित रूप से PHP खुद को विकसित करना कठिन है, लेकिन यह महान लाभ प्रदान करता है, हाँ?) शायद एक समाधान समझदार पूर्ण व्यापार के साथ एक विस्तार के माध्यम से पारदर्शी यूनिकोड को सक्षम करना होगा? XHP की तरह? एक बार फिर धन्यवाद।
फंकट्रॉन

5
$ वस्तु = (वस्तु) सरणी ("फू" => 'बार', बाज => 'बू');
पाराट्यू

3
मैं नहीं देखता कि आप कैसे देख सकते हैं "अधिकांश बाहरी दुनिया यूनिकोड नहीं है"? आप लोगों की बात कर रहे हैं? या कुछ और? क्योंकि दुनिया में अधिकांश लोग (एक बड़े अंतर से) ऐसी भाषाएँ बोलते हैं जो यूनिकोड द्वारा सबसे अच्छी तरह से प्रस्तुत की जाती हैं।
डीन हार्डिंग

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

48

एक पूर्व लंबे समय के पीएचपी विशेषज्ञ के रूप में वे चीजें जो मैं चाहूंगा:

  1. सरणियों के लिए छोटा सिंटैक्स। PHP सरणियाँ उनके लचीलेपन के कारण भाषा की अजीब विशेषताओं में से एक हैं, लेकिन यह लिखने के लिए एक खींचें है some_array_method($argity, array('key' => $value));। मेरा मानना ​​है कि यह प्रस्ताव दुर्भाग्य से PHP मेलिंग सूची में पहले से ही था।
  2. finally समर्थन
  3. / एनोटेशन जिम्मेदार बताते हैं। ये आपको एक तरीके से कस्टम व्यवहार जोड़ने की अनुमति देते हैं जिससे कोड का पुन: उपयोग किया जा सके। उदाहरण के लिए, एक एमवीसी ढांचे में, कोई भी परिभाषित कर सकता है AuthorizeAttributeजो यह दर्शाता है कि नियंत्रक या कार्रवाई विधि को उपयोगकर्ता को अधिकृत करने की आवश्यकता है। विशेषताओं की तलाश और उनके अनुसार कार्य करने के लिए ढांचा स्वयं जिम्मेदार होगा। मेरा मानना ​​है कि PHPUnit पहले से ही डॉकब्लॉक टिप्पणियों में डालकर एक प्रकार की विशेषता का उपयोग करता है, जिसे प्रतिबिंब का उपयोग करके पढ़ा जा सकता है, लेकिन डॉकब्लॉक टिप्पणियों में वास्तविक कार्यक्षमता डालना निश्चित रूप से एक हैक है।
  4. छोटा लाम्बा सिंटेक्स। लिखने के बजाय function($x){ return $x*2;}, शायद मैं लिख सकता था $x => return $x*2, या कुछ और। यह फिर से कुछ है बस इस सुविधा का उपयोग करने के लिए इसे खींचता है। उदाहरण के लिए $results = array_filter(array(1,2,3), function($a) { return $a % 2; }):बनाम $results = array_filter(array(1,2,3), $a => return $a % 2 );पूर्व में बस इतना अधिक पाइपलाइन है जो मूल रूप से उस वास्तविक कार्य के लिए अप्रासंगिक है जिसे आप पूरा करने की कोशिश कर रहे हैं।
  5. एक बिल्ट-इन Decimal(फिक्स्ड-पॉइंट मैथ) जो सामान्य ऑपरेटरों के माध्यम से गणित के संचालन का समर्थन करता है, एक तरह से अच्छा होगा, क्योंकि हमारे पास ऑपरेटर ओवरलोडिंग नहीं है।
  6. मोअर जादू के तरीके। जादू के तरीके बहुत अच्छे हैं। मैं देख सकता हूं कि PHP मैजिक विधियों के माध्यम से ओवरलोडिंग को जोड़ रहा है (मुझे पता है कि यह मूल रूप से कभी नहीं होगा।) लेकिन सामान्य तौर पर, वे भाषा को हुक करने और शांत चीजों को करने के लिए वास्तव में शानदार तरीके प्रदान करते हैं।

48

PHP को सही मायने में ऑब्जेक्ट ओरिएंटेड बनाएं। slap on another global functionपीएचपी के विकास को समाप्त करने की जरूरत है।

array_merge(array_filter(array_intersect_key($arr1, $arr2), "is_int"), $arr3);

मेरे लिए पढ़ना मुश्किल है। मुझे अपना मानसिक स्टैक बनाना होगा और खुद को संकलित करना होगा। मूल रूप से इसे उल्टा पढ़ना चाहिए। $dog->wakeup()->bark();की तुलना में पढ़ना आसान हैbark(wakeup($dog))

$arr1->array_intersect_key($arr2)->array_filter("is_int")->array_merge($arr3);

आपने ऑब्जेक्ट / मेथड सपोर्ट को सक्षम करने की दिशा में कदम बढ़ाया है अब कृपया इसे वास्तविक कोर PHP फ़ंक्शंस में उपयोग करें।

आइए 500 कार्यों का नाम बदलें और उनके लिए पैरामीटर ऑर्डर बदलें।

इस कार्यक्षमता को विधियों में शिफ्ट करने से उन्हें कुछ लगातार उपयोग करके नाम बदला जा सकेगा। क्या यह किसी भी पश्चगामी संगतता को तोड़ देगा यदि तार और सरणियों के अपने तरीके थे?


3
मुझे लगता है कि सरणी वस्तु नहीं होने के कारण PHP में एक बड़ी गलती है। सभी तरह की परेशानी की ओर ले जाता है। दुर्भाग्य से, यह एक विकासवादी बात है। आप जो चाहें कर सकते हैं, हालांकि यहाँ एक्सटेंशन या यूजरस्पेस के साथ। शायद एसपीएल अच्छी तरह से फिट होगा।
StasM

3
यही तर्क तार पर लागू होता है। मैं सामान्य तौर पर तरीकों की कमी की बात कर रहा हूं। जावा, पायथन, C # आदि सभी भाषाओं में बहुत अधिक पठनीय कोड है। मुझे लगता है कि आप सुविधाओं की तलाश कर रहे हैं, लेकिन आईएमओ टूट गया है को ठीक करना बेहतर भुगतान बंद होगा।
कीयो

6
नहीं, मूर्ख मत बनो। यह होगाdog_wake_up($dog); bark_dog($dog);
माचिस

2
IMHO, किसी भी नए स्ट्रिंग तरीकों की उम्मीद करनी चाहिए और UTF-8 से बाहर निकलें, और अपवादों को फेंक दें यदि इनपुट मान्य नहीं है UTF-8। यह यूनिकोड समर्थन के एक प्रमुख पुन: उपयोग की आवश्यकता को बहुत कम कर देगा।
rjmunro

1
@luiscubal No. एक अतिरिक्त पैरामीटर का अर्थ यह होगा कि यदि हम फ़ंक्शन में जोड़ने के लिए नई चीजों का आविष्कार करते हैं तो हम बाद में पैरामीटर नहीं जोड़ सकते हैं। उदाहरण के लिए, यदि $ string => ट्रिम () केवल व्हाट्सएप किया (जैसे 4.1.0 से पहले), तो आपका सिस्टम $ string => ट्रिम ('ISO-8859-1') ISO-8859 स्ट्रिंग्स से ट्रिम किए गए व्हाट्सएप को कहेगा। । यदि हम तब ऐसे सामान को ट्रिम करना चाहते थे जो व्हॉट्सएप नहीं था, तो हम उसके लिए पैरामीटर नहीं जोड़ पाएंगे, जब तक कि हम लोगों को पहले एन्कोडिंग निर्दिष्ट नहीं करते। हमें लोगों को यह मानने के लिए प्रोत्साहित करना चाहिए कि कहीं भी कोई भी पाठ जो UTF-8 नहीं है, गलत है
rjmunro

40

एक भाषा-एकीकृत-क्वेरी-इंजन बहुत अच्छा होगा। .NET में जो उपलब्ध है उसे सॉर्ट करें जैसे कि LINQ। यह डेटा के बड़े पैमाने पर सरणियों के माध्यम से सॉर्ट करने में मदद करेगा, और डेटाबेस एक्सेस को मानकीकृत करेगा, ताकि कम एसक्यूएल-इंजेक्शन हमले सफल हों।


2
कुछ भी जो पैरामीटर से प्रश्नों को आसान बनाता है, उसे मेरा वोट मिल जाता है!
डीन हार्डिंग

1
मुझे लगता है कि मानकीकृत डेटाबेस का उपयोग वास्तव में LINQ जैसी किसी चीज़ का बहुत महत्वपूर्ण लाभ है, क्योंकि मुझे लगता है कि यह आपके डेटाबेस ऑब्जेक्ट्स के मॉक के साथ इकाई परीक्षण को आसान बनाता है (क्योंकि आप SQL प्रश्नों के बजाय PHP कोड का मज़ाक उड़ा रहे हैं।)
davidtbernal

मुझे नहीं लगता, कि इस तरह से कुछ कोर में आना चाहिए। यह एक PECL एक्सटेंशन में बेहतर फिट होगा
हेराल्ड

38

ओह। आदिम के लिए संकेत टाइप करें। वह अच्छा रहेगा।


1
हालांकि मैं, मैं दृढ़ता से दूसरा यह है कि (एक विस्तार करने के लिए) PHP के KISS सिद्धांत की तरह। कारण यह है कि यदि आप वास्तव में रक्षात्मक होना चाहते हैं, तो आप प्रत्येक सेटर विधि में एक ही प्रकार के चेकिंग कोड के साथ समाप्त होते हैं । हम आसानी से छोड़ सकते हैं कि अगर भाषा ने मूल रूप से इसका समर्थन किया।
माइक डे

4
"टाइप हिंटिंग" बहुत दुर्भाग्यपूर्ण नाम था, क्योंकि यह "हिंटिंग" नहीं है, यह सख्त टाइपिंग है। मुझे लगता है कि मौलिक सख्त टाइपिंग PHP जैसी गतिशील भाषा में जगह से बाहर होगी। जबरदस्त टाइपिंग (एक ही चीज़ जो आंतरिक कार्य करती है - प्रयास करें strlen (123)) ठीक हो सकता है।
स्टैसम

6
इसके लिए +1। फंक्शन की घोषणाओं में टाइप हिंटिंग (या सख्त टाइपिंग) अविश्वसनीय रूप से सहायक होगा और यदि (और isv) (EACH और EVERY) विधि में बहुत अधिक कटौती होगी।
फिल स्टर्जन

5
@StasM मैं असहमत हूं। यह पूरी तरह से एक गतिशील भाषा के दायरे में है, जिससे उपयोगकर्ता को भाषा का उपयोग करने के लिए एक सांख्यिकीय रूप से टाइप करने की अनुमति मिलती है। और यह बहुत बेहतर त्रुटि को पकड़ने के लिए अनुमति देगा। यदि आप नहीं करना चाहते हैं तो आपको इसका उपयोग नहीं करना होगा, लेकिन व्यक्तिगत रूप से मैं तंग आ गया हूं जहां मैं एक इंट चाहता था और फिर कोड के माध्यम से यह पता लगाने के लिए कि बेवकूफ स्ट्रिंग कहां से गुजर रही है। या फिर, हर समय हर चीज की जाँच करें।
डैनियल बिंगहैम

2
@StasM पूरी तरह से वैधानिक रूप से टाइप किए गए चर पेश करने का कोई कारण नहीं है। हां, आप अपने कोड में त्रुटियों को इधर-उधर कर देंगे। यह पूरी बात होगी। त्रुटि फ़ंक्शन के अंदर के बजाय फ़ंक्शन कॉल समय पर होती है - जो आपको बिना किसी विचार के छोड़ देती है जहां त्रुटि वास्तव में उत्पन्न हो रही है। प्रकार रूपांतरण त्रुटियों के लिए, त्रुटि कॉल समय पर - हां रन समय में होती है। सही प्रकार से सही प्रकार से परिवर्तित करके समस्या को ठीक करें। एक समारोह में एक स्ट्रिंग दिखाई देने से बहुत बेहतर है कि एक इंट की उम्मीद है और न जाने कहां से।
डैनियल बिंगहैम

34

मैं वास्तव में बॉक्स से बेहतर यूनिकोड समर्थन की कामना करता हूं। अधिकांश भाषाएं उस दिशा में आगे बढ़ती हैं लेकिन PHP में अभी भी अजीब तरह के कमांड हैं।

PHP के तार सिर्फ सादे बाइट सरणियाँ हैं। उनकी सामग्री गैर-पोर्टेबल है क्योंकि यह वर्तमान डिफ़ॉल्ट एन्कोडिंग पर निर्भर है।

यही बात धारावाहिक द्वारा निर्मित प्रतिनिधित्व पर भी लागू होती है। यह वास्तव में किसी भी एन्कोडिंग जानकारी को संग्रहीत करने के बिना स्ट्रिंग की एक लंबाई-पूर्व-बाइट प्रतिनिधित्व है।

अधिकांश PHP (स्ट्रिंग) फ़ंक्शन का यूनिकोड के बारे में कोई सुराग नहीं है। प्रत्येक फ़ंक्शन के जोखिम स्तर सहित एक विस्तृत सूची के लिए, यहां देखें: http://www.phpwact.org/php/i18n/utf-8

http://blog.ginkel.com/2010/03/php-unicode-support-or-the-lack-thereof/


यूनिकोड समर्थन विचार की तुलना में बहुत कठिन साबित हुआ। इसलिए php6 प्रयास ठप हो गया था। अभी के लिए, हमारे पास utf-8 है और मुझे लगता है कि जाने के लिए सबसे अच्छा तरीका स्ट्रिंग कार्यों के लिए utf-8 समर्थन जोड़ना होगा, शायद intl एक्सटेंशन के हिस्से के रूप में।
स्टैसम

3
BTW, उद्धरण गलत है। PHP स्ट्रिंग्स बाइट सरणियाँ हैं, लेकिन उनकी सामग्री आपके द्वारा बनाई गई पोर्टेबल है और "डिफ़ॉल्ट एन्कोडिंग" पर निर्भर नहीं है - यह सिर्फ बाइट्स की सरणी है, आप उन्हें utf8 में चाहते हैं, utf8 डाल सकते हैं, utf16 चाहते हैं - utt16। phpwact.org लिंक मृत प्रतीत होता है।
StasM

1
मैं वास्तव में आशा करता हूं कि डिफ़ॉल्ट रूप से intl एक्सटेंशन सक्षम हो जाएगा, इसलिए ऐसे लोगों को जो UTF-8 (हर कोई नहीं है?) की आवश्यकता थी, उन्हें अपने मेजबानों से लड़ने की ज़रूरत नहीं थी ताकि वे अपेक्षा के अनुरूप व्यवहार कर सकें।
एमिल स्टेंस्ट्रम

इसके अलावा, तार पर स्पष्टीकरण के लिए धन्यवाद। मैं थोड़ी देर के लिए PHP से दूर रहा हूँ, इसलिए मैं थोड़ा कठोर हूँ। मैंने इसके बजाय पायथन के साथ यूनिकोड युद्ध लड़ा है, जिसमें पीएचपी के समान समस्याएं हैं, लेकिन उन्हें पायथन में हल करता है 3. आपके नाम पर एक सनी "ö" होना एक गड़बड़ है :)
एमिल स्टेनस्ट्रॉम

यह निश्चित रूप से एक क्षेत्र है जिसमें मैं एक सुधार देखना चाहता हूं।
नाथन उस्मान

32

असंगत रूप से नामित और पैरा-गैर-ऑब्जेक्ट वाले लोगों को बदलने के लिए निर्मित विधियों के साथ स्ट्रिंग्स ऑब्जेक्ट बनाएं। जैसे

$subject->replace($search,$replace);
$string->split($separator);
$string->trim();

आदि।

संपादित करें: एक और बात: इन विधियों को हमेशा UTF-8 की अपेक्षा और उत्सर्जन करना चाहिए, केवल उन लोगों को छोड़कर, जो विशेष रूप से एन्कोडिंग से निपटने का इरादा रखते हैं। यदि इनपुट UTF-8 अमान्य है, तो अपवाद को फेंक दिया जाना चाहिए, भले ही फ़ंक्शन का आउटपुट एन्कोडिंग से प्रभावित न हो।


ऊपर, यह वही है जो मैं लक्ष्य कर रहा हूं।
केमो

1
subject->verb(object), पैरामीटर ऑर्डर को याद रखना आसान बनाता है।
मिंग-तांग

+1 मैंने इस तरह की चीज़ करने के लिए अपना स्वयं का स्ट्रिंग क्लास बनाने के साथ खेला, यह कोडिंग को इतना आसान बनाता है और आप पैरामीटर ऑर्डर को कभी नहीं भूलते हैं।
असंतुष्टगीतगेट

2
तो क्या is_object($string)लौटेगा? यह या तो पीछे की अनुकूलता को बड़े समय के लिए तोड़ देगा, या वास्तव में लगभग-लेकिन-नहीं-काफी-वस्तुओं के अनपेक्षित रूप से पेश करने का परिणाम होगा।
TGR

@Tgr: is_object () को पदावनत किया जाना चाहिए - "वस्तु नहीं" जैसी कोई चीज नहीं होनी चाहिए। अल्पावधि में, यह एक ऐसी संपत्ति होनी चाहिए जिसे आप किसी भी वस्तु पर बंद कर सकते हैं, और डिफ़ॉल्ट स्ट्रिंग निर्माता इसे बंद कर देंगे।
rjmunro

24

1) मैं नई तात्कालिक वस्तुओं के लिए "$ यह" वापस करना पसंद करूंगा, इसलिए मैं चेन, $ उपयोगकर्ता = नया उपयोगकर्ता ('जॉन') -> सेटलैस्टनाम ('डो') -> सेव () कर सकता हूं;

2) यदि आपने कभी माणिक, और सबसे हाल ही में नोड का उपयोग किया है, तो उनके पास एक महान इंटरैक्टिव शेल (आईआरबी) है। मैं PHP है कि वास्तव में उपयोगी था के लिए प्यार होता।

3) लक्षण / मिश्रण, लेकिन मुझे लगता है कि वे रास्ते में हैं।

4) मैं लघु सरणी $ myArray = ['my', 'array'] को दूसरा स्थान देना चाहता हूं;

5) लगातार नामकरण / आदेश (यानी सुई की बाधा)


मुझे ऐसा create()तरीका बनाने से नफरत है जो सिर्फ # 1 के आसपास काम करने के लिए कुछ खास नहीं करता है!
एलन पीयर्स

मैं ऐसा ही करता हूं, लेकिन लेट स्टैटिक बाइंडिंग और ऑब्जेक्ट सुपरक्लास का उपयोग करते हुए, इस तरह हर वर्ग जो मेरे सुपरक्लास को बढ़ाता है, उसके पास विधि है, जैसे: सोमसेक्लास सुपरऑब्जेक्ट {}; ;> Somemethod () - SomeClass :: create ()
dukeofgaming

Github.com/philsturgeon/php-ps पर एक नज़र डालें यह केवल एक शुरुआत है लेकिन कुछ मदद से यह बहुत उपयोगी हो सकता है।
फिल स्टर्जन

1
एक PEAR पैकेज भी है जो PHP में त्वरित प्रयोगों को कोडिंग के लिए एक इंटरैक्टिव शेल प्रदान करता है - pear.php.net/package/PHP_Shell
kguest

(नया फू ()) -> बार () 5.4 का हिस्सा है। 3) और 4) भी हैं।
StasM

20

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

2) कृपया एक PHP वितरण को एक एकल वितरण योग्य बाइटकोड फ़ाइल या निष्पादन योग्य में संकलित करने की बॉक्स विधि प्रदान करें। यह व्यावसायिक विकास की भाषा के रूप में PHP की अपील को बहुत बढ़ाएगा। यह भाषा का एक बुनियादी घटक होना चाहिए। एक आवेदन GUI के लिए इस्तेमाल HTML फ़ाइलों के बारे में चिंता मत करो क्योंकि ...

3) कृपया HTML में PHP टैग एम्बेड करने की क्षमता से छुटकारा पाएं। या कम से कम 'कोई एम्बेड नहीं' मोड प्रदान करें। यह एक पूर्ण गड़बड़ है और आवेदन तर्क और प्रस्तुति को एक साथ मिलाकर खराब डिजाइन को प्रोत्साहित करता है। डेवलपर्स को प्रदर्शन के लिए टेम्प्लेट का उपयोग करना चाहिए और PHP फ़ाइलों को एक साथ थप्पड़ मारना और सर्वश्रेष्ठ की उम्मीद नहीं करनी चाहिए।

पर हस्ताक्षर किए,

GrandmasterB

ps: यहाँ दूसरों को क्या कहते हैं, यह मत सुनो, मैं पूरे साल अच्छा रहा हूँ


37
1)। शामिल महान हैं। हर चीज में शामिल है। 2)। यह अच्छा है। 3) टेंपलेटिंग PHP का सबसे मजबूत फीचर है । आपको कुछ अन्य टेम्प्लेटिंग बुलशिट का उपयोग करने के लिए मजबूर करना एक बहुत बुरा कदम होगा।
जोश के

8
मुझे पसंद है (1) और (2), लेकिन (3) एक प्रतिगामी कदम की तरह लगता है। PHP आपको टेम्प्लेटिंग पावर देता है, यह आपके ऊपर है कि आप इसे बुद्धिमानी से उपयोग करते हैं या नहीं।
geekbrit

11
3 कोई मतलब नहीं है - एमवीसी रूपरेखा में किसी भी वी के लिए एम्बेडिंग टैग आवश्यक है।
एलेक्स

9
मैंने इस उत्तर को "प्रिय सांता के रूप में पढ़ा, कृपया PHP को PHP न बनाएं।"
स्टीफन

1
3, सही बाहर है के रूप में पीएचपी है एक templating भाषा।
एंड्रयू

18

E_ERRORअपरिभाषित स्थिरांक पर एक ini निर्देश , मान लें कि इसके साथ एक स्ट्रिंग है E_NOTICE


1
क्लास कांस्टेंट ऐसा करते हैं, बी.टी.वी.
StasM

4
गंभीरता से मुझे समझ नहीं आ रहा है कि वे PHP को बिना तार के क्यों मान लेते हैं। यह सबसे बड़ी बेवकूफी है। मैं E_ERRORया तो चुनूंगा E_PARSE
बोल्टलॉक

14

वैश्विक नामस्थान को एक सुविचारित नामकरण सम्मेलन के साथ सामान्य करें जो नए-कामर्स के लिए समझ में आता है!

हमारे प्यारे जेफ एटवुड को उद्धृत करने के लिए: PHP बेकार है लेकिन इससे कोई फर्क नहीं पड़ता !


1
मैं सिद्धांत रूप में सहमत हूं, लेकिन पता नहीं है कि इसे अभ्यास में कैसे करना है :)
StasM

3
@StasM: मुझे लगता है कि पहला कदम पुस्तकालयों के नए संस्करणों को नामांकित करने के लिए होगा और वर्तमान में वैश्विक पुस्तकालयों को अक्षम करने के लिए प्रोग्रामर (आईएनआई सेटिंग्स) के माध्यम से अनुमति देगा। मुझे लगता है कि पुराने संस्करणों के लिए एक संगतता पैक होगा, लेकिन इसे लिखना बहुत मुश्किल नहीं होना चाहिए।
टी


13

1) छोटा सरणी / ऑब्जेक्ट सिंटैक्स, एक ला जावास्क्रिप्ट (जैसा कि पहले उल्लेख किया गया है)

2) constवैरिएबल की अनुमति दें जैसे define()कि गणना के परिणाम की अनुमति देता है।

3) सीधे निर्माणकर्ता से पीछा करना: new User()->name('Ryan');

4) ऐरे डीफ्रेंसिंग: something_that_returns_array()[4];

5) विस्तारित एसपीएल समर्थन। एसपीएल वस्तुओं के रूप में स्ट्रिंग और एरे फ़ंक्शंस (अन्य चीज़ों के बीच) को फिर से तैयार करने का एक अच्छा काम करता है। एसपीएल का विस्तार करने से भाषा के बारे में बहुत सारी पकड़ का समाधान हो सकता है।

6) का उपयोग करते हुए के ArrayObject()रूप में पारदर्शी होना चाहिए array()। आपको array_filter($array_object_instance)बिना कुछ किए ऐसे काम करने में सक्षम होना चाहिए array_filter($array_object_instance->getArrayCopy())। इससे भी बेहतर, निश्चित रूप से होगा $array_object_instance->filter()

7) फुल-ऑन यूनिकोड अच्छा होगा।

8) अजीब स्वचालित प्रकार के रूपांतरण करना बंद करें। उदाहरण के लिए, आपको echoएक स्ट्रिंग के रूप में स्पष्ट रूप से टाइपकास्ट किए बिना एक SimpleXMLElement ऑब्जेक्ट में सक्षम नहीं होना चाहिए । या कम से कम, ऐसा होने पर कुछ फेंक दें (जैसे, सख्त मोड में, या जो भी मोड error_reporting(-1)है)।

9) कई थ्रेड्स के लिए समर्थन, या कुछ प्रकार के इवेंटेड / एसिंक्रोनस कॉलबैक। यह सबसे ज्यादा मायने रखता है जब बड़ी फाइलें cURL के जरिए अपलोड करने की कोशिश की जाती है। पुराने-पुराने धागे के बजाय, एप्पल के ग्रैंड सेंट्रल डिस्पैच की तरह कुछ अच्छा होगा। या यहां तक ​​कि कुछ जावास्क्रिप्ट-जैसे जहां आप async अनुरोध कर सकते हैं और कॉलबैक को परिभाषित कर सकते हैं।

10) लगातार नामकरण / आदेश (यानी सुई की बाधा) अच्छा होगा, लेकिन मुझे लगता है कि यह एसपीएल के साथ बेहतर हल हो सकता है।

11) IRB की तरह एक आधिकारिक तौर पर समर्थित इंटरैक्टिव PHP शेल। फेसबुक ने एक कॉल किया है जिसे phpshपायथन में लिखा गया था, लेकिन इसमें उस पॉलिश की कमी है जो मैं देखना चाहता हूं।

12) परावर्तन एपीआई के लिए, (a) डॉकब्लॉक टिप्पणी के लिए स्थिरांक (वैश्विक और वर्ग), और (बी) समर्थन को एक समझदार डेटा संरचना में PHPDoc जैसी टिप्पणियों को पार्स करने के लिए जोड़ें। एक PECL पैकेज है जिसे "docblock" कहा जाता है जो ऐसा करने का प्रयास करता है, लेकिन ऐसा नहीं लगता कि लेखक बहुत दूर हो गया।

संपादित करें: 13) मैं रूबी कैन की तरह उपयोग करने की क्षमता !और ?फंक्शन के नामों को भी देखना पसंद करूंगा ।


मैं सहमत हूँ, कि arrayobject array_ * फ़ंक्शन के लिए समर्थित होना चाहिए। लेकिन अगर आप arrayobject के उपवर्गों पर विचार करते हैं, तो "array_merge" जैसे कुछ के लिए अपेक्षित परिणाम क्या होगा। क्या आपको केवल उसी वर्ग के उदाहरणों को मर्ज करने की अनुमति दी जाएगी और array_merge लौटाएगा? एक php सरणी या arrayobject का एक उदाहरण (क्रमशः यह उपवर्ग है)?
हराल

मैं तर्क दूंगा कि चूंकि डेटा आंतरिक रूप से एक सरणी है, और ArrayObject को कार्यक्षमता के साथ लपेटता है, तो ArrayObject के उप-वर्ग अभी भी आंतरिक रूप से सरणियों के साथ काम कर रहे होंगे। मैं एक और मानक सरणी या ArrayObject (या उपवर्ग) को मर्ज करने में सक्षम होने की उम्मीद करूंगा। जहाँ तक यह वापस आएगा, मैं यह तर्क दूंगा कि यह एक नया ArrayObject भी लौटाए, लेकिन इस उदाहरण का अनुसरण करें कि simplexml_load_string () सेट करें जहाँ आप उस वर्ग का नाम निर्दिष्ट कर सकते हैं जिसका परिणाम एक उदाहरण होना चाहिए।
रयान परमान

12

1) पायथन सूची समझ की शैली में सरणी की समझ:

$newlist = array($x->something for $x in $oldlist);

//with short array syntax:
$newlist = [$x->something for $x in $oldlist];

2) लघु सरणी सिंटैक्स

$newlist = [1,2,3,4,...];

3) खाली करें () स्ट्रिंग '0' को सच न मानें


2
मुझे लगता है कि (1) कुछ ऐसा जो इटरेटर और क्लोजर से पकाया जाता है, बेहतर होगा।
स्टैसम

+1 IMHO, इसे सभी भाषाओं, साथ ही पुनरावृत्तियों में शामिल किया जाना चाहिए। वे उपयोगी नहीं होने का सिर्फ एक तरीका है।
इवान प्लाइस

empty()तार्किक विपरीत है if ($x), इसलिए यह समझ में आता है कि empty('0')यह सच है, क्योंकि if ('0')झूठ है। एकमात्र अंतर यह empty()है कि यदि चर सेट नहीं होता है, तो एक नोटिस न फेंके।
एंड्रयू

12

मैं CONSTANT सरणियों को बनाने / परिभाषित करने का एक कानूनी तरीका देखना चाहूंगा। इस तरह की कार्यक्षमता का अनुकरण करने के लिए कुछ हैकिश तरीके हैं, लेकिन यह अच्छा होगा यदि यह PHP की एक सीधी सुविधा है। यह अच्छा होगा यदि आप एक सरणी बना सकते हैं जो जावा के "अंतिम" घोषणा के समान है।

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

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

नया विचार!!

ओह, मैंने सोचा था कि मैं वास्तव में php में कुछ और चाहूंगा। मुझे लगता है कि .htaccess के काम के समान php फ़ाइल संचालन और निर्देशिका संचालन को नियंत्रित करने के लिए किसी तरह की प्रणाली चाहिए।

.Phpaccess फ़ाइल को कुछ समान डोमेन / समान मूल नीति को ट्रिगर करना चाहिए।

उदाहरण के लिए, यदि मैं वर्चुअल होस्ट के साथ कई साइटों की मेजबानी कर रहा था तो मेरे पास एक निर्देशिका में एक .phpaccess फ़ाइल हो सकती है जो किसी भी स्क्रिप्ट के ओर्गिन की जांच करने के लिए php को बताएगी जो कि मेरी संरक्षित निर्देशिका पर संचालित करने की कोशिश कर रहे हैं। यदि स्क्रिप्ट उस निर्देशिका या इसके उप-निर्देशिकाओं से नहीं आई थी, तो फ़ाइल संचालन / या सॉकेट संचालन को अस्वीकार कर दिया जाएगा।

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

इसके अलावा अगर इस तरीके के विलोम में इसे हासिल करने का तरीका अच्छा होगा। यानी, एक निर्देशिका में स्क्रिप्ट की पहुंच को उस निर्देशिका तक सीमित करना।

यह यिन और यांग हां पता है!


के लिए +1 final। स्पष्ट करने के लिए: finalइसका मतलब है कि एक चर का मान रनटाइम पर स्थापित किया जा सकता है (स्थिरांक के विपरीत, जिसे निरंतर अभिव्यक्ति होना है), लेकिन केवल एक बार सेट किया जा सकता है। यह भी देखें सी # की readonly
davidtbernal

1
ट्रंक के लिए गेटर्स / सेटर के लिए एक प्रस्ताव है जो आसानी से सुपरसीड करेगा, आदि अपरिवर्तनीय सरणियाँ हालांकि शायद करना मुश्किल होगा।
स्टैसम

Re phpaccess, PHP में पहले से ही एक "सुरक्षित मोड" है जो आपके द्वारा वर्णित किया गया है।
असंतुष्टगीत

11

एक कट्टर PHP प्रोग्रामर के रूप में मेरी दो सबसे बड़ी शुभकामनाएं:

  1. अंत में समर्थन करें। यह झंडे या इसी तरह के साधनों के माध्यम से काल्पनिक रूप से इसे प्राप्त करने के लिए एक बड़ी गड़बड़ है।
  2. मैं गेटर्स और सेटर्स के लिए C # के सिंटैक्स पर समर्थन देखना पसंद करूंगा। जब आपके पास बहुत सारे गेटर्स होते हैं और एक सरल वाक्यविन्यास सेट करता है जैसे कि C # 's तो यह एक बेहतरीन परफॉर्मेंस बूस्टर है, बजाय इसे जावा तरीका और गेट्टर और सेटर के तरीकों को लिखने के। जादू के तरीके उन मामलों में बहुत बढ़िया हैं, जहाँ आप सदस्यों को गतिशील रूप से बनाना चाहते हैं (उदाहरण के लिए, यदि आप एक टेम्पलेट रेंडरर को उपयोग करने के लिए कुछ चर देना चाहते हैं), लेकिन सामान्य गुणों के लिए अच्छा नहीं है, जिस पर आप आईडीई को स्वत: पूर्ण करना चाहते हैं, उनके बारे में जानें प्रकार, और इतने पर। यह कोड को छोटा और फिर भी पठनीय और उपयोग में आसान बनाने में मदद करेगा।

1
1. दुर्भाग्य से, यह करना कठिन है, लेकिन निश्चित रूप से एक अच्छा टूडू आइटम है। wiki.php.net/rfc/propertygetsetsyntax
StasM

@StasM: एनोटेशन के माध्यम से इसे कैसे करें? की तर्ज पर कुछ: / ** @get getFoo; @ सेट सेटू; * (निजी $ फू;
टी

9

भाषा सिंटैक्स : डेवलपर्स में रुचि रखने वाले (हालांकि phpreboot JS बहुत दूर हो जाता है) में pihipi और phpreboot में कुछ अच्छे सुराग हैं।

विकास पद्धति : यह PHP.net के जीवनकाल को बहुत बढ़ाएगा यदि इस तरह के सर्वेक्षणों को वास्तव में ध्यान में रखा गया हो। कोई और अधिक विली-नीली दोपहर आईआरसी सत्र वाक्यविन्यास निर्णय न करें।

व्यक्तिगत विशेषताएं : कुछ पहले उल्लेख किया गया है, लेकिन मैं खुशी से कुछ कर्म यहाँ अतिरिक्त कुंद हो जला देंगे:

  • यूनिकोड स्ट्रिंग प्रकार।
  • बिगिन्ट (पायथन देखें)।
  • रनकिट बिलिन को हटाने / नाम बदलने / निर्मित कार्यों और कक्षाओं को ओवरराइड करने के लिए, जो हमेशा अच्छी तरह से डिज़ाइन नहीं किए जाते हैं।
  • आधुनिक ओ.ओ.पी.
    • कई विरासत (अनाड़ी लक्षण सिंटैक्स के साथ शायद ही कभी किनारे के मामलों का समर्थन करने के लिए जटिलता)
    • स्केलर ऑब्जेक्ट्स (पायथन को देखें) के रूप में दोगुना हो सकते हैं, उदाहरण के लिए सरणी () ऐरेऑबजेक्ट के रूप में काम करता है, या स्प्लिट्रिंग के रूप में स्ट्रिंग्स (प्रयोग करने योग्य तरीकों की आवश्यकता है, सभी स्ट्रिंग फ़ंक्शंस उपलब्ध होने चाहिए str::toupper())
  • चमकदार शिट \नाम स्थान वाक्यविन्यास को चित्रित करें, पार्सर को ठीक करें, और ::विकल्प के रूप में अपनाएं । तुम्हें पता है, एक असली भाषा की तरह।
  • LINQ की कोई भी भिन्नता (हालांकि मुझे विश्वास नहीं है कि आप लोग एक समझदार वाक्य रचना तैयार करते हैं)
  • या XML शाब्दिक।
  • Php.ini रनटाइम व्यवहार और सिमेंटिक स्विच से छुटकारा पाएं। यह कुछ उत्साह, सच्चा है, लेकिन डेवलपर्स और उपयोगकर्ता आधार को लाभान्वित करेगा।
  • हां, Magic_quotes अभी तक नहीं गए हैं।
  • कन्वर्ट Zend इंजन bytecode पीबीसी के लिए

यद्यपि, यह स्पष्ट नहीं है, मैं खुशी से किसी और को बाद में करने के लिए निधि दूंगा, और मुख्य कार्यान्वयन के रूप में php.net को मारूंगा। :P
ओह, बस ध्यान दिया, यह सामुदायिक विकि है। तो एक मौका है कि आप वास्तव में यहाँ कर्म के लिए नहीं, बल्कि वास्तविक रुचि के लिए हैं। यदि हां, तो <b> मुद्दे </ b> पर गौर करें, जो गंभीर रूप से भाषा (निर्देशक) को नुकसान पहुंचाता है।


5
मुझे \ namepace सिंटैक्स से नफरत है, लेकिन यह एक लंबी और दुखद कहानी है कि यह ऐसा क्यों हो गया और शायद यह बदलने वाला नहीं है ... शायद अगर मैं PHP में सिर्फ एक चीज को बदल सकता था जो मेरा प्राथमिक उम्मीदवार होगा। पर अब जो है वो है।
StasM

@StasM: कुछ PHP चीजों के बारे में असभ्य होने के लिए प्रतिक्रिया और खेद के लिए धन्यवाद, लेकिन मुझे PHP के बारे में परवाह नहीं है; इसलिए बहुत राय है। - मैंने तर्क के बारे में थोड़ा पढ़ा है। बैकलैश दुविधा अभी तक बहुत बड़ा मुद्दा नहीं है, लेकिन यह अगले साल हो जाएगा जब पुस्तकालयों का प्रसार होगा। इसलिए मैं आशा करता हूं कि कोई व्यक्ति एक ऐसा पार्सर लिखता है जो अंडरग्राउंड योजनाओं के लिए कार्गो / पंथ \ _ \ _ को फिर से लिखता है।
mario

हो सकता है कि मैं चूक गया हो, लेकिन क्या अंतर है कि हम नामस्थान के लिए '::' या '\' का उपयोग करते हैं?
माइकल टी

@Pies: ::किसी भी C / C ++ वाक्यविन्यास के करीब भाषा के लिए अधिक स्वाभाविक होता। और `\` न केवल सभी प्रोग्रामिंग भाषाओं के बीच असामान्य है , बल्कि इसमें निहित अर्थ हैं। कुछ पिछली चर्चाएँ: stackoverflow.com/questions/238550/… या Developers.slashdot.org/article.pl?sid=08/10/26/1610259 और reddit.com/r/programming/comcut/79cut/… - लेकिन में प्रतिक्रिया के बिना और इसे चूसने के लिए डेवलपर समुदाय को संकेत देने पर विशेष रूप से निर्णय लेना बहुत स्वागत योग्य कदम नहीं था।
मारियो

1
एकाधिक विरासत के लिए + 1000000।
ts01

8

मैं एक अवधारणा (अपवाद) में त्रुटियों और अपवादों के एकीकरण को देखना पसंद करूंगा। इसके महान अपवादों को पकड़ने और उन्हें एक लॉग में लिखने में सक्षम होने के लिए, इस तरह से कीड़े खोजने और ठीक करने के लिए। लेकिन अगर कोडपैथ में कुछ मौलिक रूप से गलत (पढ़ें: PHP त्रुटि) है जो बहुत कम हिट है, तो उस जानकारी को मुद्दों के उसी डेटाबेस में फ़नल करने का कोई अच्छा तरीका नहीं है।

कृपया, सांता, php.ini में एक स्विच शुरू करें जो अपवादों में सभी त्रुटियां करेगा - आदर्श रूप से, अपवाद मैं अपने कोड में पकड़ सकता हूं।


1
इंजन में पहले से ही इसके लिए समर्थन है और कई एक्सटेंशन इसका उपयोग करते हैं। आप इसे आसानी से set_error_handler () और ErrorException के साथ भी कर सकते हैं। E_STRICT / E_NOTICE / E_DEPRECATE से सावधान रहें ...
StasM

मैं इन तरीकों से अच्छी तरह से वाकिफ हूं और वे वास्तव में हैकी हैं। मुझे एक एकीकृत तरीका पसंद है - वह जिसमें E_STRICT / E_NOTICE और ऐसा शामिल है।
एलेक्स

7

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

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


1
वास्तव में, इसके बारे में अधिक सोचना, ऑफलोडिंग डेटाबेस को दिलचस्प परिदृश्य लगता है, इसलिए उस पर +1 :)
StasM

1
@Stasm, मेरा मानना ​​है कि अलग-अलग अनुरोध अलग-अलग प्रक्रियाओं के रूप में चलते हैं। मैं एक जटिल पृष्ठ के बारे में बात कर रहा हूँ जिसके लिए पृष्ठ निर्माण और पृष्ठभूमि संगणना आवश्यक है। मैं गलत हो सकता हूं, लेकिन मुझे नहीं लगता कि एक अलग प्रक्रिया में डेटाबेस अपडेट ऑपरेशन (उदाहरण के लिए) को बंद करने का एक तरीका है। ऐसा करने का कारण यह होगा कि पृष्ठ को जल्द से जल्द आवश्यक रूप से पूरा करने के लिए पृष्ठ से उत्पादन करने के लिए संबंधित सभी प्रसंस्करण की प्रतीक्षा करने के बजाय, आवश्यक रूप से अनुरोधकर्ता को भेजा जाए। पुनश्च .. अद्यतन के लिए धन्यवाद!
गीकब्रिट

7

मुझे वास्तव में याद आया कि अदिश प्रकारों को वस्तुओं के रूप में नहीं माना जाता है, और वास्तविक वस्तुएं किसी अन्य प्रकार या वस्तु (__toString () के कारण स्ट्रिंग को छोड़कर) की तरह कार्य नहीं कर सकती हैं।


हाँ, कृपया टाइपकास्टिंग के लिए जादू के तरीके।
मिशैल टी

7
  • गणना के लिए समर्थन (जावा 1.5+ की तरह)
  • इंटरफेस और कक्षाओं में विधि वापसी प्रकार को परिभाषित करने में सक्षम हो
  • संपत्तियों और विधियों पर टिप्पणी / मेटाडेटा परिभाषा के लिए समर्थन।
  • विधि स्केलर तर्कों के लिए सख्त प्रकार की हिंटिंग करने में सक्षम हो।

+1 जैसा कि मैं PHP में उन सभी चीजों को देखना चाहता हूं।
जेरेमी

6

Http://php.net पर "यूजर कंट्रीब्यूटेड नोट्स" को साफ करें । वे कभी-कभी एक वास्तविक गड़बड़ होते हैं, जबकि सामान्य रूप में एक महान मूल्य होता है।


1
कुछ प्रकार के वोट अप / डाउन कार्यक्षमता और उत्तर में मूल टिप्पणी से लिंक करने की क्षमता निश्चित रूप से अच्छी होगी।
TGR

5

PHP में कुछ काफी सभ्य सरणी कार्य हैं, कॉलबैक के साथ सूची प्रसंस्करण क्षमता create_function()प्रदान करना और एक बुनियादी लंबदा कलन प्रदान करना।

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

इससे भी महत्वपूर्ण बात, सूची कार्य पूरी तरह से पूर्ण नहीं हैं:

  • कोई foldrफ़ंक्शन नहीं है, array_reduce()प्रदान करता हैfoldl
  • array_map()दूसरे तर्क में कुंजी को पास करना चाहिए, जैसा कि array_walk()करता है
  • एक array_map_keys()कुंजी संशोधन के लिए उपयोगी हो सकता है
  • सूची समझ, बहुत भद्दा है range(), array_fill()और array_fill_keys()केवल इतने सारे मामलों को संभालने, और array_filter()अलग है

मैं Haskell में PHP बनाने का लक्ष्य नहीं बना रहा हूं, लेकिन PHP का उपयोग अक्सर सूची प्रकार डेटा संरचना हेरफेर के लिए किया जाता है और इस संबंध में उपकरणों का एक पूरा सेट उपयोगी होगा।


1
मेरा एक सहकर्मी यह भी सोचता है कि अन्य संबंधित कार्यों के लिए कुछ अन्य अतिरिक्त भी हो सकते हैं; उनके गिठुब खाते पर उल्लेख किया गया: ये array_all () और array_any () की कमी हैं, जो यह जांचते हैं कि क्या एक कॉलबैक द्वारा प्रतिनिधित्व की गई शर्त किसी सरणी में सभी या किसी भी तत्व के लिए है। gist.github.com/44350
kguest

5

ऑपरेटर ओवरलोडिंग:

$result = $MatrixA + $MatrixB * $MatrixC;

1
सुनिश्चित नहीं है कि यह PHP के साथ डायनामिक रूप से टाइप की गई भाषा पर कितनी अच्छी तरह क्लिक करेगा।
बोल्टलोक

5
शायद यह जादू के तरीकों के माध्यम से किया जाना चाहिए, जैसे __add ($ obj), __times ($ obj) आदि
Michał T

यह पहले से ही PECL ext: pecl.php.net/package/operator के रूप में मौजूद है । इसे मुख्य स्रोत के साथ विलय करने के लिए बहुत अधिक काम नहीं होना चाहिए
Xananax

4

E_WARNING के उत्पादन के बजाय अपवाद जोड़ें ... यह बहुत कष्टप्रद है कि मैं कुछ का उपयोग नहीं कर सकता जैसे:

try{
   $f = fopen('asd', 'r');
   flock($f, LOCK_SH);

   while(!feof($f)){
       echo fread($f, 512);
   }

   fclose($f);

}catch(IOException $ex){
   echo 'Oops, something wrong: '.$ex->getCode();
}

बेशक, वर्तमान में ज्यादा व्यावहारिक नहीं है, लेकिन इसे प्राप्त करना बहुत कष्टप्रद है:

चेतावनी

चेतावनी

चेतावनी

और मैं अपने स्वयं के error_handler और string sniffing को लिखे बिना कोड के प्रवाह को नियंत्रित नहीं कर सकता हूं, जो त्रुटि उत्पन्न की गई है (अनुमति, गलत फ़ाइलनाम या कुछ और; मैं यहां अन्य त्रुटियों के बारे में बुरा नहीं मानता) ताकि सही अपवाद फेंक सके; ।

मुझे आशा है कि मैं यह नहीं समझाता कि यह महत्वपूर्ण क्यों है।

PHP एक समय पहले ऑब्जेक्ट-ओरिएंटेड हो गया और हम, प्रोग्रामर जो PHP का उपयोग करते हैं, OO सुविधाओं के लिए आगे देख रहे हैं, "गोटो" को शुरू नहीं कर रहे हैं ... जब मुझे पता चला कि यह वास्तव में खुश है, तो मैंने सोचा कि यह अप्रैल फूल का दिन था।


जब तक पकड़ा नहीं जाता, अपवाद स्क्रिप्ट को मार देगा। उत्पादन सर्वर पर चेतावनी, लॉग हो जाएगी और उपयोगकर्ता को कभी भी प्रदर्शित नहीं होगी। अब इस कार्यक्षमता को बदलने से बहुत सारी स्क्रिप्ट्स टूट जाएंगी क्योंकि वे इसे पकड़ने के लिए डिज़ाइन नहीं किए गए हैं। (ध्यान दें, कि मैं स्वयं अपवादों को फेंकने के लिए त्रुटि हैंडल लिखता हूं)। अब, पीडीओ चेतावनी या अपवाद फेंक सकता है: प्रोग्रामर रनटाइम पर निर्णय लेता है। यह कार्यक्षमता संभवतः एक है जिसे मॉड्यूल के अधिक में जोड़ा जाना चाहिए।
Reece45

4
  1. ऑब्जेक्ट मॉडल को समेकित करें - सभी ऑब्जेक्ट बेस ऑब्जेक्ट क्लास का विस्तार करें। ऑब्जेक्ट क्लास (अन्य चीजों के बीच) सभी जादू विधियों को लागू करेगा (इसलिए वे अब जादू नहीं होंगे!)

  2. एक्सटेंशन को अपने स्वयं के नामस्थानों पर ले जाएं - वैश्विक नामस्थान को अव्यवस्थित करें $conn = new \MySQLi\Connection();

  3. spl_autoload()समारोह को अपंग करें ! गंभीरता से, यह संभवतः PHP की सबसे बड़ी विशेषताओं में से एक है और एक ही समय में सबसे बेकार भी है। spl_autoloadडिफ़ॉल्ट ऑटोलैडर है, जो नाम स्थान और कई फ़ाइल एक्सटेंशन का समर्थन करता है, लेकिन किसी अज्ञात कारण से फ़ाइल नाम को कम करने की आवश्यकता होती है। इसके लिए एक बग रिपोर्ट भरी गई है , लेकिन कर्मचारियों ने जवाब दिया कि वे पिछड़े संगतता के कारण इसे ठीक नहीं करेंगे। सही ... यह हर ढाँचे के जहाजों की तरह नहीं है, क्योंकि यह स्वयं का ऑटोलैडर है, क्योंकि डिफ़ॉल्ट एक अपंग है!



4

नवीनतम संस्करण तक दागी समर्थन लाएं और इसे मानक बिल्ड में शामिल करें, अधिमानतः डिफ़ॉल्ट कॉन्फिगरेशन http://wiki.php.net/rfc/taint पर चालू किया गया

यह XSS और SQL इंजेक्शन के हमलों को लोगों के कोड को ठीक से बनाने से रोकेगा।

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