PHP 8.5 में नई सुविधाएँ
(stitcher.io)- PHP 8.5 एक बड़ा अपडेट वर्ज़न है, जिसमें pipe operator, clone with, नया URI parser जैसी कई सुविधाएँ शामिल हैं
- pipe operator फ़ंक्शन कॉल चेन को सरल बनाता है, जिससे readability और maintainability बेहतर होती है
- Clone with फीचर ऑब्जेक्ट को कॉपी करते समय property values को साथ ही बदलने देता है, लेकिन कुछ readonly properties पर सीमाएँ हैं
#[NoDiscard],(void)cast, closure constant expression support, fatal error backtrace output जैसी सुविधाओं से developer convenience बेहतर हुई है- array processing, property validation, non-standard cast deprecation जैसे विस्तृत सुधार और backward compatibility से जुड़े बदलाव इस वर्ज़न में शामिल हैं
प्रमुख नई सुविधाएँ
-
pipe operator (
|>) के आने से फ़ंक्शन के परिणाम को सीधे अगले फ़ंक्शन में पास करते हुए chain-style code लिखा जा सकता है- nested function calls की जगह step-by-step data transformation structure को सपोर्ट करता है
- उदाहरण कोड में
trim,str_replace,strtolowerआदि को क्रम से जोड़ा गया है
-
Clone with फीचर के ज़रिए ऑब्जेक्ट कॉपी करते समय property values को साथ ही बदला जा सकता है
- उदाहरण class
Bookमें इसेclone($this, ['title' => $title])रूप में इस्तेमाल किया गया है - लेकिन बाहर से readonly properties को clone करते समय
public(set)access specifier की ज़रूरत होती है
- उदाहरण class
-
#[NoDiscard]attribute और(void)cast जोड़े गए हैं- ऐसे फ़ंक्शन को चिह्नित किया जा सकता है जिनका return value ignore करने पर warning आए
(void)cast का उपयोग करके warning को suppress किया जा सकता है
-
closure improvements के तहत constant expressions में closures और first-class callable objects का उपयोग किया जा सकता है
- उदाहरण में इसे
#[SkipDiscovery(static function (...))]रूप में attribute के अंदर परिभाषित किया गया है - ऐसे closures को अनिवार्य रूप से
staticघोषित करना होगा और वे बाहरी variables तक पहुँच नहीं सकते
- उदाहरण में इसे
-
Fatal error backtrace output सुविधा जोड़ी गई है
- पहले जो stack trace information दिखाई नहीं देती थी, अब वह error message में शामिल होगी, जिससे debugging आसान होगी
array और URI से जुड़ी सुविधाएँ
-
array_first()औरarray_last()फ़ंक्शन जोड़े गए हैं- ये array के पहले और आख़िरी element को सरल तरीके से लौटाते हैं
- यह
array_key_first()औरarray_key_last()पर आधारित पुराने जटिल तरीके की जगह लेता है
-
नया URI parser जोड़ा गया है
Uri\Rfc3986\Uriclass के ज़रिएgetHost(),getScheme(),getPort()जैसे methods मिलते हैं- इससे URI manipulation और analysis सरल हो जाते हैं
properties और validation से जुड़ी सुविधाएँ
#[DelayedTargetValidation]attribute जोड़ा गया है#[Override]जैसे कुछ attributes की validation timing को compile time से runtime तक delay किया जा सकता है- इसका उद्देश्य backward compatibility समस्याओं को कम करना है
अन्य छोटे बदलाव
- static properties की asymmetric visibility को सपोर्ट किया गया है
- class के बाहर constants पर भी attributes लगाए जा सकते हैं
- constructor property promotion अब final properties पर भी लागू किया जा सकता है
#[\Override]attribute अब properties पर भी लागू किया जा सकता है- Dom\Element::$outerHTML property जोड़ी गई है
- Exif extension अब HEIF/HEIC images को सपोर्ट करता है
filter_var()कॉल मेंFILTER_THROW_ON_FAILUREflag जोड़ा गया है
deprecation और incompatible changes
- non-standard cast names जैसे
(boolean),(integer)का उपयोग बंद किया जा रहा है - backticks(```) को
shell_exec()के alias की तरह इस्तेमाल करने का तरीका deprecated किया गया है - constant redeclaration फीचर deprecated किया गया है
disabled_classesini setting हटा दी गई है- पूरे बदलाव और deprecation सूची को PHP 8.5 upgrade document में देखा जा सकता है
संक्षिप्त सार
- PHP 8.5 ऐसा वर्ज़न है जो code readability, debugging, property handling, array manipulation समेत पूरे development experience को बेहतर बनाता है
- pipe operator और URI parser का असर सीधे practical code simplification पर पड़ता है
- delayed attribute validation, नए array functions, backtrace output जैसे बदलाव maintainability और stability बढ़ाते हैं
- कुछ non-standard syntax और settings की deprecation के कारण code cleanup की ज़रूरत होगी
- कुल मिलाकर यह रिलीज़ language consistency को मजबूत करने और developer convenience बढ़ाने पर केंद्रित है
1 टिप्पणियां
Hacker News की राय
मुझे अब भी PHP से प्यार है
मैंने 23 साल पहले PHP के लिए क्रिप्टोग्राफी सॉफ़्टवेयर बनाया था, और वह आज भी अच्छी तरह काम कर रहा है
मैं आज भी PHP न्यूज़लेटर चलाता हूँ, और इसकी कम्युनिटी अब भी मज़बूत है
मैं Python और Node.js भी इस्तेमाल करता हूँ, लेकिन तेज़ और सरल कामों के लिए आखिरकार PHP पर लौट आता हूँ
हालांकि, PHP 5 के बाद भाषा का काफ़ी जटिल हो जाना दोधारी तलवार जैसा है
जब Python 2 से 3 की ओर जा रहा था, तब PHP 5.2→5.3 और 5.6→7.0 तक विकसित हुआ
namespaces, PSR0 autoloading, parser improvements आदि के कारण speed और structure में काफ़ी सुधार हुआ
हर update में compatibility तोड़े बिना क्रमिक सुधार किए गए, और warnings व shim दिए गए ताकि पुराने version भी बनाए रखे जा सकें
PHP 6 का रद्द होना string handling changes की वजह से था, और नतीजे में वह समझदारी भरा फ़ैसला था
यह ऐसी भाषा और कम्युनिटी रही है जिसने लंबे समय तक रोज़गार दिया, और यह project उसका सम्मान करता रहा
आप इसे जटिल तरीके से लिख सकते हैं, पर ऐसा करना ज़रूरी नहीं है
2000 के दशक के मध्य में मैंने Zend से जुड़े tools के साथ काम किया था, और याद है कि वे काफ़ी पेचीदा थे
PSR सीखकर और security व features को ध्यान में रखकर देखें तो यह कहीं अधिक स्थिर और शक्तिशाली भाषा बन चुकी है
PHP 5 के बाद का विकास प्रभावशाली है, लेकिन उसके साथ जटिलता बढ़ने की समस्या भी आई है
पुराने version से सीखने वाले लोगों के लिए modern codebase अपरिचित और उसका पीछा करना मुश्किल लग सकता है
यह कम्युनिटी के लिए ताकत है, लेकिन वापस लौटने वाले developers के लिए एक बाधा भी है
मैंने 10 साल तक C++ इस्तेमाल किया, लेकिन आज की modern C++ code की तुलना में PHP काफ़ी ज़्यादा readable लगती है
ऐसा लगता है कि simplicity का लक्ष्य गायब हो गया है, और features बस जुड़ते ही जा रहे हैं
web क्षेत्र ख़ास तौर पर बहुत तेज़ी से बदलता है, इसलिए साथ न चलो तो पीछे छूट जाते हो
PHP ख़ास तौर पर शुरुआती लोगों की पहली website बनाने वाली भाषा रही है, इसलिए इसमें बदलाव दूसरे languages की तुलना में ज़्यादा महसूस हो सकता है
बहुत से लोग PHP को लेकर शर्म महसूस करने की प्रवृत्ति रखते हैं, लेकिन मैं ऐसा नहीं मानता
मैं भाषा के बारे में बहुत गहराई से नहीं जानता, लेकिन यह जानता हूँ कि इसमें कई शानदार projects हैं
इन दिनों मेरा पसंदीदा PHP project BookStack है, जिसे मैं family wiki की तरह इस्तेमाल करता हूँ
अच्छी तरह maintain किए गए PHP stack पर बने sites आज भी बहुत हैं
मैंने 2021~2023 में production PHP इस्तेमाल की, और language से ज़्यादा समस्या पुराने codebase और कम salary level की थी
PHP 4 दौर का legacy code बहुत है, और data access patterns भी एक जैसे नहीं हैं, इसलिए maintenance मुश्किल होता है
लेकिन PHP 8 पर migrate करते समय code quality में बड़ा सुधार हुआ
अगर मैं कोई नया project शुरू करूँ तो शायद PHP न चुनूँ, लेकिन modern Laravel project हो तो मैं ख़ुशी से जुड़ूँगा
लेकिन beginners के लिए security concepts के बिना इसमें उतरना आसान था, इसलिए SQL injection जैसी समस्याएँ बहुत हुईं, और इसी वजह से इसे ‘असुरक्षित भाषा’ जैसी reputation मिली
Laravel जैसे framework के साथ यह कहीं अधिक स्थिर और परिपक्व वातावरण है
यह guitar बजाने या कविता लिखने जैसा है: कोई भी कर सकता है, लेकिन इसे सचमुच अच्छी तरह करना कठिन है
मैं सीधे code देखकर सीखता हूँ, और radio/music server को self-host करने का मज़ा है
PHP update के साथ-साथ और जटिल होती जाने वाली भाषा बन गई है
यह अब भी web-केंद्रित language है, इसलिए सवाल उठता है कि यह इस तरह क्यों विकसित हो रही है
अंत में लगता है कि पारंपरिक object-oriented languages एक जैसी दिशा में सिमट रही हैं
केवल web के लिए बनी language हो, तब भी उसके विकसित होने के पर्याप्त कारण हैं। developer experience सुधारना हमेशा मूल्यवान है
array_first(), array_last() उपयोगी हैं, लेकिन pipe operator maintainability को नुकसान पहुँचा सकता है
यह केवल unary functions को support करता है, इसलिए complex functions में उल्टा bugs पैदा कर सकता है
PHP 8.5 announcement की सबसे दिलचस्प बात भाषा की स्थिरता और परिपक्वता है
यह हैरानी की बात है कि PHP, GTA6 से पहले array_first, array_last, fatal error stack trace जोड़ रहा है
PHP में लगातार नए functions और syntax जुड़ते रहने से लंबे समय में maintenance cost बढ़ती है
official release notes देखें तो कुछ features का मूल्य संदिग्ध लगता है
parse_url()से overlap करता हैofficial PHP 8.5 release notes
pipe operator के examples ज़्यादातर languages में temporary variable इस्तेमाल करने वाले सामान्य तरीके को बस हटा देते हैं
URL parsing का example भी
parse_url()से सीधे compare नहीं किया गया थाparse_url()standards का पूरी तरह पालन नहीं करता और relative URL handling में कमज़ोर हैनया
uri()function ज़्यादा साफ़ है, और अगर partial function application feature जुड़ जाए तो pipe chain और readable हो जाएगीमैं PHP CLI में **backtick(
) से shell_exec() कॉल** किया करता था, लेकिन अब यह deprecated हो गया हैmkdir $dirname` जैसी चीज़ें मैं अक्सर इस्तेमाल करता थाshell metacharacter injection का ख़तरा होता है, इसलिए PHP का
mkdir()याpcntl_exec()इस्तेमाल करना चाहिए