2 पॉइंट द्वारा GN⁺ 2025-11-21 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 की ज़रूरत होती है
  • #[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\Uri class के ज़रिए 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_FAILURE flag जोड़ा गया है

deprecation और incompatible changes

  • non-standard cast names जैसे (boolean), (integer) का उपयोग बंद किया जा रहा है
  • backticks(```) को shell_exec() के alias की तरह इस्तेमाल करने का तरीका deprecated किया गया है
  • constant redeclaration फीचर deprecated किया गया है
  • disabled_classes ini 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 टिप्पणियां

 
GN⁺ 2025-11-21
Hacker News की राय
  • मुझे अब भी PHP से प्यार है
    मैंने 23 साल पहले PHP के लिए क्रिप्टोग्राफी सॉफ़्टवेयर बनाया था, और वह आज भी अच्छी तरह काम कर रहा है
    मैं आज भी PHP न्यूज़लेटर चलाता हूँ, और इसकी कम्युनिटी अब भी मज़बूत है
    मैं Python और Node.js भी इस्तेमाल करता हूँ, लेकिन तेज़ और सरल कामों के लिए आखिरकार PHP पर लौट आता हूँ
    हालांकि, PHP 5 के बाद भाषा का काफ़ी जटिल हो जाना दोधारी तलवार जैसा है

    • मेरा मानना है कि PHP बड़े बदलाव को सही ढंग से संभालने का एक प्रतिनिधि उदाहरण है
      जब 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 उसका सम्मान करता रहा
    • बहुत लोग कहते हैं कि PHP जटिल हो गई है, लेकिन मेरे द्वारा 5.3 में लिखा गया सरल कोड PHP 8 में भी पूरी तरह चलता है
      आप इसे जटिल तरीके से लिख सकते हैं, पर ऐसा करना ज़रूरी नहीं है
    • क्या वह क्रिप्टोग्राफी सॉफ़्टवेयर Zend था, यह जानने की जिज्ञासा है
      2000 के दशक के मध्य में मैंने Zend से जुड़े tools के साथ काम किया था, और याद है कि वे काफ़ी पेचीदा थे
    • अगर PHP 8 को शुरू से सही तरीके से सीखा जाए, तो यह काफ़ी आसान है
      PSR सीखकर और security व features को ध्यान में रखकर देखें तो यह कहीं अधिक स्थिर और शक्तिशाली भाषा बन चुकी है
  • PHP 5 के बाद का विकास प्रभावशाली है, लेकिन उसके साथ जटिलता बढ़ने की समस्या भी आई है
    पुराने version से सीखने वाले लोगों के लिए modern codebase अपरिचित और उसका पीछा करना मुश्किल लग सकता है
    यह कम्युनिटी के लिए ताकत है, लेकिन वापस लौटने वाले developers के लिए एक बाधा भी है

    • मुझे लगता है कि modern PHP अब भी पढ़ने में आसान भाषा है
      मैंने 10 साल तक C++ इस्तेमाल किया, लेकिन आज की modern C++ code की तुलना में PHP काफ़ी ज़्यादा readable लगती है
    • PHP 8 सीख लेना काफ़ी है। आज की PHP पहले से कहीं बेहतर है
    • आजकल ज़्यादातर software इसी तरह की समस्या से जूझता है
      ऐसा लगता है कि simplicity का लक्ष्य गायब हो गया है, और features बस जुड़ते ही जा रहे हैं
    • सच कहें तो दूसरे languages में भी यही बदलाव हो रहे हैं
      web क्षेत्र ख़ास तौर पर बहुत तेज़ी से बदलता है, इसलिए साथ न चलो तो पीछे छूट जाते हो
    • Java specialist के तौर पर काम करते हुए भी मुझे अक्सर नए features साथियों को समझाने पड़ते हैं
      PHP ख़ास तौर पर शुरुआती लोगों की पहली website बनाने वाली भाषा रही है, इसलिए इसमें बदलाव दूसरे languages की तुलना में ज़्यादा महसूस हो सकता है
  • बहुत से लोग PHP को लेकर शर्म महसूस करने की प्रवृत्ति रखते हैं, लेकिन मैं ऐसा नहीं मानता
    मैं भाषा के बारे में बहुत गहराई से नहीं जानता, लेकिन यह जानता हूँ कि इसमें कई शानदार projects हैं
    इन दिनों मेरा पसंदीदा PHP project BookStack है, जिसे मैं family wiki की तरह इस्तेमाल करता हूँ
    अच्छी तरह maintain किए गए PHP stack पर बने sites आज भी बहुत हैं

    • modern PHP तेज़ और शानदार भाषा है
      मैंने 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 हो तो मैं ख़ुशी से जुड़ूँगा
    • PHP समझने में सहज और इस्तेमाल में आनंददायक भाषा थी
      लेकिन beginners के लिए security concepts के बिना इसमें उतरना आसान था, इसलिए SQL injection जैसी समस्याएँ बहुत हुईं, और इसी वजह से इसे ‘असुरक्षित भाषा’ जैसी reputation मिली
    • मैं JS/TS + modern frameworks की तुलना में PHP backend को पसंद करता हूँ
      Laravel जैसे framework के साथ यह कहीं अधिक स्थिर और परिपक्व वातावरण है
    • मैंने PHP से अपना career बनाया है, और आज भी इसके modernization process का आनंद ले रहा हूँ
      यह guitar बजाने या कविता लिखने जैसा है: कोई भी कर सकता है, लेकिन इसे सचमुच अच्छी तरह करना कठिन है
    • मुझे AzuraCast पसंद है
      मैं सीधे code देखकर सीखता हूँ, और radio/music server को self-host करने का मज़ा है
  • PHP update के साथ-साथ और जटिल होती जाने वाली भाषा बन गई है
    यह अब भी web-केंद्रित language है, इसलिए सवाल उठता है कि यह इस तरह क्यों विकसित हो रही है

    • C# और Java भी web backend पर केंद्रित रहते हुए जटिल हुए हैं
      अंत में लगता है कि पारंपरिक object-oriented languages एक जैसी दिशा में सिमट रही हैं
    • web खुद अब सरल नहीं रहा
    • NativePhp जैसे projects भी हैं
      केवल web के लिए बनी language हो, तब भी उसके विकसित होने के पर्याप्त कारण हैं। developer experience सुधारना हमेशा मूल्यवान है
    • मैंने शुरू में लेख ठीक से पढ़े बिना आलोचना की थी, लेकिन दोबारा देखने पर कुछ features अच्छे लगे
      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 जोड़ रहा है

    • यह अच्छे additions हैं, लेकिन सच कहें तो array_shift या array_pop से भी काम चल जाता था
  • PHP में लगातार नए functions और syntax जुड़ते रहने से लंबे समय में maintenance cost बढ़ती है
    official release notes देखें तो कुछ features का मूल्य संदिग्ध लगता है

    • URI extension तेज़ है, लेकिन मौजूदा parse_url() से overlap करता है
    • pipe operator पसंद-नापसंद का मामला है, और code style consistency को बिगाड़ सकता है
    • clone improvement बहुत मामूली बदलाव है
    • #Discard/void static analyzer की functionality की जगह लेता है
    • constants में closures दिलचस्प हैं, लेकिन यह complex attributes (#attribute) की ओर ले जा सकता है
    • cURL persistent handles सचमुच performance बढ़ाने वाला तत्व है
    • array_first() syntax sugar के स्तर का है, और बड़े projects में शायद ही इस्तेमाल हो
  • 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` जैसी चीज़ें मैं अक्सर इस्तेमाल करता था

    • वह security के लिहाज़ से anti-pattern है
      shell metacharacter injection का ख़तरा होता है, इसलिए PHP का mkdir() या pcntl_exec() इस्तेमाल करना चाहिए