PHP एक स्क्रिप्टिंग भाषा है जिसका उपयोग बड़ी संख्या में उपयोगकर्ता वेब विकास उद्देश्यों के लिए करते हैं। PHP का नवीनतम स्थिर और अद्यतन संस्करण, 8.3, 23.11.2023 को जारी किया गया था। 2000 में जारी PHP 3.x के बाद से कई नवाचार और परिवर्तन हुए हैं। PHP अभी भी बहुत बड़े दर्शकों द्वारा उपयोग की जाने वाली सबसे लोकप्रिय वेब विकास (वेब डिज़ाइन) भाषाओं में से एक है। इस लेख में, हम कोड उदाहरणों के साथ PHP 8.3 में नवाचारों और परिवर्तनों की जांच और विश्लेषण करेंगे।
PHP 8.3 प्रमुख नई सुविधाएँ और सुधार
पिछले PHP संस्करण, PHP 8.2 की तुलना में PHP 8.3 में कई प्रमुख नवाचार और सुधार हैं। साथ ही, कुछ सुविधाओं को अप्रचलित कर दिया गया है। अब हम कोड उदाहरणों के साथ एक-एक करके नवाचारों और सुधारों की जांच करेंगे।
टाइप किए गए वर्ग स्थिरांक
डेवलपर्स के लिए घोषणा प्रकार एक बहुत ही महत्वपूर्ण विशेषता है जो स्थिरता बढ़ाती है और वेब विकास में त्रुटि दर कम करती है। किसी वर्ग में गुणों के लिए प्रकार घोषणा सुविधा PHP 7.4 में जोड़ी गई थी। हालाँकि बाद के संस्करणों में इस सुविधा में कई सुधार किए गए, फिर भी यह सुविधा कक्षा में स्थिरांक के लिए उपलब्ध नहीं थी। PHP 8.3 के साथ, अब कक्षाओं में स्थिरांक के लिए प्रकार घोषित करना संभव है।
// Doğru kullanım:
class MyClass {
// Bildirilen tür ve değer aynı
const string VERSION = "PHP 8.3"; // değer string
}
// Hatalı kullanım:
class MyClass {
// Bildirilen tür ile değer farklı
const int VERSION = "PHP 8.3"; // değer string
}
// Hatalı kullanım:
class MyClass {
// Bildirilen tür sınıf sabitleri için desteklenmiyor
const void VERSION = "PHP 8.3"; // değer string
}कुछ प्रकार की घोषणाएँ वर्ग स्थिरांक के लिए समर्थित नहीं हैं।
वर्ग स्थिरांक के लिए असमर्थित प्रकार की घोषणाएँ: void, callable, never
एक नया फ़ंक्शन: json_validate()
JSON प्रारूप (json-एन्कोडेड डेटा) में डेटा के साथ काम करते समय, हमें डेटा का उपयोग करने से पहले यह सत्यापित करना होगा कि आने वाला डेटा वैध है। हम इसे निम्नलिखित या समान विधियों का उपयोग करके PHP 8.3 से पहले के संस्करणों में कर रहे थे।
// PHP 8.3'ten önceki sürümlerde JSON verisini doğrulama
$data = $json_decode($maybeJSON);
if (json_last_error() === JSON_ERROR_NONE) {
// $data ile gerçekleştirilecek işlemler
}इस पुराने उदाहरण में, JSON डेटा को मान्य करते समय, PHP डेटा के आकार के आधार पर महत्वपूर्ण मेमोरी का उपभोग कर सकता है। PHP 8.3 में, एक नया PHP फ़ंक्शन जोड़ा गया था जो एक प्रदर्शन-उन्मुख तेज़ समाधान बनाता है: json_validate()। हमने नीचे इस फ़ंक्शन के उपयोग परिदृश्य का उदाहरण दिया है।
// PHP 8.3'te JSON verisini doğrulama
$data = $json_decode($maybeJSON);
if (json_validate($maybeJSON)) {
// $data ile gerçekleştirilecek işlemler
}एक नई सुविधा: #[ओवरराइड]
PHP में इंटरफ़ेस लागू करते समय, हम इंटरफ़ेस में विधियों के लिए विस्तृत कार्यक्षमता प्रदान करते हैं। किसी वर्ग का उदाहरण बनाते समय, हम समान नाम और संगत हस्ताक्षर के साथ एक वैकल्पिक संस्करण बनाकर मूल विधि को ओवरराइड कर सकते हैं। इससे सॉफ़्टवेयर में बड़ी समस्याएँ उत्पन्न हो सकती हैं. संक्षेप में, समस्या यह है कि हमें लगता है कि एक छोटी सी टाइप त्रुटि के कारण हमने मुख्य विधि को ओवरराइड कर दिया है।
PHP 8.3 #[ओवरराइड] सुविधा इस समस्या का समाधान प्रदान करती है। अब इसे उदाहरण में देखते हैं.
class A {
protected function myOverrideFunc(): void {}
// Doğru kullanım
// Bu örnek çalışacak
// Üstteki sınıfta ilgili method var ve geçersiz kılındı
class B extends A {
#[\Override]
public function myOverrideFunc(): void {}
// Hatalı kullanım
// Bu örnek çalışmayacak, çünkü ana sınıfta method yok
// Muhtemelen gözden kaçan bir yazım hatası
class C extends A {
#[\Override]
public function myOverrideFunction(): void {}
}केवल पढ़ने योग्य गुणों की गहरी क्लोनिंग
PHP ने PHP 8.1 में व्यक्तिगत वर्ग गुणों को केवल पढ़ने के लिए घोषित करने और उन्हें PHP 8.2 में संपूर्ण वर्ग को निर्दिष्ट करने की संभावना पेश की। हालाँकि, अधिकांश वेब डेवलपर्स ने सोचा कि ऐसी सुविधाओं वाली कक्षाओं के साथ काम करते समय लगाई गई सीमाएँ प्रोग्रामिंग तर्क में व्यावहारिकता को रोकती हैं।
इसे बदलने के लिए आरएफसी दो मुख्य सिफ़ारिशें की गईं:
केवल पढ़ने के लिए
readonlyउन कक्षाओं को अनुमति देना जिन्हें विस्तारित करने की अनुमति नहीं हैreadonlyक्लोनिंग के दौरान सुविधाओं को पुनः आरंभ करने की अनुमति देना
दूसरा सुझाव PHP 8.3 में शामिल किया गया था। यह नया दृष्टिकोण PHP 8.3 में जोड़ा गया readonly गुणों वाले वर्ग के उदाहरणreadonly गुण) __clone यह इसे अपनी जादुई विधि से पुनः आरंभ करने की अनुमति देता है।
RFC का यह कोड उदाहरण हमें यह समझने में मदद कर सकता है कि यह नई विधि कैसे काम करती है:
कक्षा स्थिरांक और एनम सदस्यों की गतिशील फ़ेचिंग
PHP में अन्य सुविधाओं के विपरीत, वैरिएबल नामों के साथ क्लास स्थिरांक और एनम सदस्यों को कैप्चर करना थोड़ा अधिक जटिल है। PHP 8.3 से पहले हम इसे नीचे दिए गए उदाहरण की तरह कर सकते थे:
class Foo {
public function __construct(
public readonly DateTime $bar,
public readonly DateTime $baz
) {}
public function __clone() {
// Klon çağrıldığında $bar yeni bir DateTime alacak
$this->bar = clone $this->bar;
// Ardından bu metod çağrılacak
$this->cloneBaz();
}
private function cloneBaz() {
// Bu __clone içinden çağrıldığından dolayı doğru bir kullanımdır
unset($this->baz);
}
}
$foo = new Foo(new DateTime(), new DateTime());
$foo2 = clone $foo;class MyClass {
public const THE_CONST = 9;
}
enum MyEnum: int {
case FirstMember = 9;
case SecondMember = 10;
}
$constantName = 'THE_CONST';
$memberName = 'FirstMember';
echo constant('MyClass::' . $constantName);
echo constant('MyEnum::' . #memberName)->value;अब, आइए PHP 8.3 में उपरोक्त उदाहरण में क्लास और एनम परिभाषाओं का उपयोग करके मान प्राप्त करें:
$constantName = 'THE_CONST';
$memberName = 'FirstNumber';
echo MyClass::{$constantName};
echo MyEnum::{$memberName}->value;एक नई विधि: getBytesFromString()
हम कह सकते हैं कि यह विधि PHP 8.3 में जोड़ी गई सुविधाओं में सबसे अप्रत्याशित थी: वर्णों के पूर्व-अनुमोदित संग्रह का उपयोग करके यादृच्छिक पाठ उत्पन्न करना।
यह नई विधि अत्यंत सरल एवं स्पष्ट है। हम विधि में संसाधनों के रूप में कुछ अक्षर देते हैं और निर्दिष्ट करते हैं कि हम उनमें से कितने का उपयोग करना चाहते हैं। बस इतना ही! अब हमारी विधि यादृच्छिक वर्णों के साथ परिणाम लौटाएगी जब तक कि यह निर्दिष्ट लंबाई तक नहीं पहुंच जाती। अब इसे एक उदाहरण से स्पष्ट करते हैं
$generateRandomString = new Random\Randomizer();
$allowedChars = 'ABCDEFGHJKMNPQRSTVWXYZ';
$generateRandomString->getBytesFromString($allowedChars, 6) // "MBDSFD" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 6) // "DJSDKA" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 4) // "SDLA" - rastgele gelen veriयह संभव है कि आउटपुट हमारे द्वारा निर्दिष्ट वर्णों की कुल लंबाई से अधिक लंबा हो। हमने इसे नीचे दिए गए उदाहरण में किया:
$generateRandomString = new Random\Randomizer();
$allowedChars = '123456';
$generateRandomString->getBytesFromString($allowedChars, 8) // "47384252" - rastgele gelen veriयदि पैरामीटर के रूप में हमारे द्वारा दिए गए सभी वर्ण अलग-अलग हैं, तो उनमें से किसे चुना जाएगा इसकी संभावना बराबर है। हालाँकि, हम अपनी समर्थित वर्ण सूची में एक से अधिक वर्ण जोड़कर आउटपुट में समान वर्ण प्रदर्शित कर सकते हैं। हमने इसे अगले उदाहरण में दिखाया।
$generateRandomString = new Random\Randomizer();
$allowedChars = 'AAAAA12345';
$generateRandomString->getBytesFromString($allowedChars, 5) // "4AA12" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 8) // "38A19AA5" - rastgele gelen veriनई विधियाँ: getFloat() और NextFloat()
इस नवाचार में, PHP 8.3 दो नए तरीकों का परिचय देता है जो PHP के यादृच्छिक विस्तार का विस्तार करते हैं: getFloat() और NextFloat()।
इन विधियों का एक उदाहरण:
$generateRandomNumber = new Random\Randomizer();
// Rastgele ondalıklı (float) bir rakam oluştur
// Değer 0 ile 5 arasında olsun
$generateRandomNumber->getFloat(0,5); // 2.483929 - rastgele gelen veri
// 0 ile 1 arasında rastgele ondalıklı bir rakam oluştur
$generateRandomNumber->nextFloat(); // 0.4828258 rastgele gelen veriPHP 8.3 में छोटे नवाचार और सुधार
उपरोक्त नवाचारों के अलावा, PHP 8.3 में दर्जनों अन्य छोटे पैमाने के सुधार और नवाचार हैं। हमने उन्हें नीचे दी गई सूची में उनके स्रोत दस्तावेज़ों के साथ सूचीबद्ध किया है।
- DOMElement वर्ग के लिए नई विधियाँ:
DOMElement::getAttributeNames(),DOMElement::insertAdjacentElement(),DOMElement::insertAdjacentText(),DOMElement::toggleAttribute(),DOMNode::contains(),DOMNode::getRootNode(),DOMNode::isEqualNode()DOMNameSpaceNode::contains() औरMParentNode::replaceChildren(). - IntlCalendar वर्ग के लिए नई विधियाँ:
IntlCalendar::setDate(),IntlCalendar::setDateTime(),IntlGregorianCalendar::createFromDate()औरIntlGregorianCalendar::createFromDateTime(). - नए एलडीएपी फ़ंक्शन: ldap_connect_wallet() और ldap_exop_sync()।
- नया
mb_str_pad()मल्टी-बाइट स्ट्रिंग फ़ंक्शन (मल्टी-बाइट स्ट्रिंग फ़ंक्शन)। - नए पॉज़िक्स फ़ंक्शन:
posix_sysconf(),posix_pathconf(),posix_fpathconf()औरposix_eaccess(). - नई विधि:
ReflectionMethod::createFromMethodName() - नया सॉकेट फ़ंक्शन:
socket_atmark(). - नई स्ट्रिंग (पाठ) फ़ंक्शन:
str_increment(),str_decrement(), औरstream_context_set_options(). - नई ZipArchive क्लास विधि:
ZipArchive::getArchiveFlag(). - अधिकतम अनुमत स्टैक आकार सेट करने के लिए नई php.ini सेटिंग:
zend.max_allowed_stack_size.
PHP 8.3 में बहिष्कृत
PHP के प्रत्येक नए संस्करण के साथ, कुछ कोड को बहिष्करण के लिए चिह्नित किया जाता है। एक बार पूरी तरह से बंद हो जाने के बाद इन सुविधाओं का उपयोग करने की कभी भी अनुशंसा नहीं की जाती है। यदि अप्रचलित कोड का उपयोग किया जाता है, तो कोड निष्पादित होने पर एक त्रुटि संदेश लौटाया जाएगा।
PHP 8.3 में बहिष्करणों की सूची:
- U_MULTIPLE_DECIMAL_SEPARATORS स्थिरांक को हटा दिया गया है।
- माउंट19937
3MT_RAND_PHPवैरिएंट को अस्वीकृत कर दिया गया है. ReflectionClass::getStaticProperties()अब निरर्थक नहीं हो सकता.- PHP.ini सेटिंग्स
assert.active,assert.bail,assert.callback,assert.exceptionऔरassert.warningपदावनत कर दिया गया है. get_class()औरget_parent_class()पदावनत कर दिया गया है.
PHP 8.3
इस लेख में, हमने PHP 8.3 में महत्वपूर्ण परिवर्तनों और नवाचारों की समीक्षा की। PHP 8.3 में सभी परिवर्तनों की अधिक विस्तृत सूची के लिए आधिकारिक चेंजलॉग हमारा सुझाव है कि आप इसकी समीक्षा करें. यदि आप अपने कोड या साइट को PHP 8.2 से PHP 8.3 में अपग्रेड करना चाहते हैं, तो यह मार्गदर्शिका उपयोगी हो सकती है: PHP 8.3 माइग्रेशन गाइड -> https://www.php.net/manual/en/migration83.php
यदि आप PHP संस्करणों और माइग्रेशन के बारे में चिंतित हैं, तो हम नए संस्करण को PHP 8.3 में अपग्रेड करने के लिए कुछ समय देने की सलाह देते हैं।
PHP और JavaScript भाषाओं और संबंधित प्रौद्योगिकियों का पूर्ण कवरेज Onur Özden Web Çözümleri वेब सॉफ्टवेयर हम सेवाएँ प्रदान करते हैं। यदि आपका कोई प्रश्न या अनुरोध है, तो आप उद्धरण प्राप्त करने के लिए नीचे बाईं ओर व्हाट्सएप बटन के माध्यम से तुरंत हमसे संपर्क कर सकते हैं।



