PHP 8.1 در حال حاضر در حال توسعه است و تا پایان سال 2021 منتشر خواهد شد.
ویژگی های جدید
- علامت گذاری عددی هشتم صریح
- تابع جدید `array_is_list`
- توابع هش الگوریتم `$options` را می پذیرند
- پشتیبانی از الگوریتم هش MurmurHash3
- xxHash از الگوریتم های هش پشتیبانی می کند
- Curl: پشتیبانی از DNS-over-HTTPS
تغییرات سینتکسی و تابعی
- GD Extension: شناسه های قلم اشیا class کلاس “GdFont” هستند
- محدودیت های متغیر `$GLOBALS`
- FTP Extension: منابع اتصال از اشیا class کلاس “FTPConnection” هستند
- منابع IMAP: منابع `imap` اشیا class کلاس “IMAPConnection” هستند
- پسوند finfo: منابع `file_info` به اشیا` موجود `finfo` منتقل می شوند
- Pspell Extension: منابع `pspell`،`pspell config` اشیا class کلاس “\\ PSpell”، “\\ PSpellConfig” هستند
- محدودیت های عملگر `version_compare`
علامت گذاری عددی هشتم صریح
PHP از سیستم های مختلف عددی پشتیبانی می کند ، از جمله دهدهی پیش فرض (پایه -10) ، باینری (پایه -2) ، اکتال (پایه -8) و هگز (پایه -16).
سیستم های عددی جدا از اعشار با پیشوند خود پیشوند می شوند:
- هگز با 0x پیشوند : مثلا: 0x11 = 17
- باینری با 0b پیشوند : مثلا: 0b11 = 3
- اکتال با ۰ پیشوند : مثلا: ۰۱۱ = ۹
در PHP 8.1 به بعد ، اعداد Octal نیز از 0o پشتیبانی می کنند. (صفر و به دنبال آن o همانند Oscar) پیشوند، که به معنای واقعی کلمات عددی هشت ضلعی است ، می تواند واضح تر و خواناتر شود که در واقع اعداد هشت عددی است. 0O (صفر و به دنبال آن حروف بزرگ مانند Oscar) نیز پشتیبانی می شود.
در بسیاری از زبانهای برنامه نویسی از 0 پیشوند برای حروف الفبا عددی هشتگانه استفاده می شود ، دقیقاً مانند PHP. با این حال ، بسیاری از زبانها از صریح نماد 0o نیز پشتیبانی می کنند و 0o را توصیه کرده اند.
echo 0xff; // 255
echo 0b111; // 7
echo 77; // 77
echo 077; // 63
echo 0o77; // 63, In PHP 8.1
echo 0O77; // 63, In PHP 8.1
077 === 63; // true
077 === 0o77; // true
077 === 0O77; // true
علاوه بر این ، جدا کننده های عددی خط زیر در حروف الفبا عددی پیشوند 0o / 0O نیز پشتیبانی می شوند:
echo 0o7716_1412; // 16573194
پیشوند ۰ تغییر نمی کند
پیشوند ۰ موجود منسوخ نشده است و عملکرد آن دقیقاً به همان شکل ادامه دارد.
پیشوندهای 0o / 0O علاوه بر پیشوند 0 موجود پشتیبانی می شوند.
هیچ تغییری در رشته های عددی وجود ندارد
رشته های عددی ، یعنی رشته هایی که حاوی یک عدد هستند ، تحت تأثیر این تغییر قرار نمی گیرند. \"0o16\"
(به عنوان یک رشته) به عنوان یک عدد تفسیر نمی شود ، و برای is_numeric
نیز true
بر نمی گردد.
echo \"016\"; // \"016\"
is_numeric(\"0o77\"); // false
is_numeric(\"0b11\"); // false
is_numeric(\"0x16\"); // false
توجه داشته باشید که \"016\"
برای is_numeric
مقدارtrue
است و تغییر نمی کند:
تأثیر سازگاری به عقب
پیشوندهای 0o و 0O پیشوندهای جدیدی هستند که در نسخه های قدیمی PHP پشتیبانی نمی شدند. تلاش برای استفاده از آنها در نسخه های قدیمی PHP منجر به خطای نحوی می شود:
$value = 0o77;
Parse error: syntax error, unexpected identifier \"o77\" in ... on line ...