नया PHP एक्सटेंशन स्केलर में कस्टम तरीकों को जोड़ने की अनुमति देता है

Github पर एक नया प्रायोगिक PHP एक्सटेंशन "scalar_objects" दिखाई दिया है, जिसके साथ आप संख्याओं, स्ट्रिंग्स, सरणियों में कोई भी विधि जोड़ सकते हैं।
यह कुछ इस तरह दिखता है:

$result = $string->replace('shit', 'candy')->remove(',')->toUpper()->split(" ")->sort(); 

सुंदर, है ना?
स्थापना निर्देश ऊपर दिए गए लिंक पर पाए जा सकते हैं, PHP 5.4 की आवश्यकता है।
ध्यान रखें कि विस्तार बहुत प्रारंभिक अल्फा संस्करण में है, पहली प्रतिबद्ध तारीख 24 जनवरी है।
मुझे खुशी है कि विस्तार के लेखक PHP योगदानकर्ता निकिता पोपोव हैं: एक संभावना है कि किसी दिन इस तरह के एपीआई को दुभाषिया के मूल में जोड़ा जाएगा।
अगला, मैं सिर्फ दिखाता हूं कि आप इन नई सुविधाओं का उपयोग विकास में कैसे कर सकते हैं।

मान लें कि हमारे पास यह रेखा है:

 $string = 'lemon, orange, shit, banana, apple'; 

उद्देश्य:

यह आमतौर पर इस तरह किया जाता है:

 $string = str_replace('shit', 'candy', $string); $string = str_replace(',', '', $string); $string = strtoupper($string); $array = explode(' ', $string); sort($array); 

इस विस्तार के साथ, कार्य एक पंक्ति में हल किया गया है:

 $result = $string->replace('shit', 'candy')->remove(',')->toUpper()->split(" ")->sort(); 

सब कुछ स्पष्ट और सुंदर है, केवल इसे कैसे क्रैंक करना है?
1. scalar_objects एक्सटेंशन स्थापित करें;
2. स्ट्रिंग्स और सरणियों के लिए हैंडलर कक्षाएं बनाएं जिनकी हमें ज़रूरत है सार्वजनिक विधियों के साथ:

 class StringHandler { public function replace($from, $to) { return str_replace($from, $to, $this); } public function split($separator, $limit = PHP_INT_MAX) { return explode($separator, $this, $limit); } public function toUpper() { return strtoupper($this); } public function remove($what) { return $this->replace($what, ''); } } class ArrayHandler { public function sort($flags = SORT_REGULAR) { sort($this, $flags); return $this; } public function count() { return count($this); } } 

3. इसी वर्गों के लिए तार और सरणियों के लिए तरीकों को बांधें:

 register_primitive_type_handler('string', 'StringHandler'); register_primitive_type_handler('array', 'ArrayHandler'); 

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

 "foobar"->trim(); 

कारण पार्स त्रुटि, अर्थात, विधियों को केवल अब तक चर पर बुलाया जा सकता है।
रिपॉजिटरी में भी एक सुविधाजनक एपीआई "स्ट्रिंग क्वेरी" के कार्यान्वयन का एक उदाहरण है:

 //       ? $str->contains(str\anyOf(['foo', 'bar', 'hello', 'world'])); //        ? $str->endsWith(str\noneOf(['.c', '.ho', '.lo'])); 

स्ट्रैप्न, स्ट्रैस्पन, स्ट्रैप्रक के विपरीत यह बहुत स्पष्ट और याद रखने में आसान है।

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

परियोजना से लिंक: https://github.com/nikic/scalar_objects/

Source: https://habr.com/ru/post/In167431/


All Articles