خب قصد داریم که بصورت مختصر و کاربردی تغییرات نسخه php 7.3 رو بررسی کنیم. در این نسخه شاهد تغییرات زیادی بودیم که کاربردی ترین و تاثیر گذار ترین آن ها را بررسی می کنیم.
احتمالا شما هم با ساختار های Heredoc و Nowdoc آشنا هستید و از آن ها استفاده کرده اید. اگر این اسم ها برای شما نا آشناست به مثالی از آن ها توجه کنید:
$foo = <<<IDENTIFIER This is simple of heredoc and nowdoc syntax "foo" bar; IDENTIFIER
از این ساختار برای نگهداری رشته های چند خطی استفاده می شود. مهم ترین نکته اینست که IDENTIFIER پایانی حتما باید ابتدا خط باشد. بدین معنی که قبل از آن هیچ گونه کاراکتری مثل فاصله و یا تب نباید باشد. در نسخه جدید php این محدودیت رفع شده است که به هرچه زیباتر شدن کد با تورفتگی کمک می کند. تغییراتی که این ساختار در نسخه جدید داشته است به شرح ذیل می باشد:
$foo = ['php', '7.3', <<<EOT foo - hello world! -- bar EOT, 'snippets', 'ir' ]; var_dump($foo);
که خروجی آن به شکل زیر است.
array(5) { [0]=> string(3) "php" [1]=> string(3) "7.3" [2]=> string(36) "foo - hello world! -- bar" [3]=> string(8) "snippets" [4]=> string(2) "ir" }
سازگاری با نسخه قبل:
اگر شما از علامت استفاده شده برای تعریف بلاک، در رشته خود استفاده نکرده باشید در این نسخه مشکلی نخواهید داشت. به عنوان مثال در کد زیر، در خط 4 بلاک تمام می شود.
$foo = <<<HELLO HELLO_WORLD <-- this will not terminate the string literal HELLOWORLD <-- this one will not either. HELLO WORLD<-- this one will HELLO;
در نسخه های قبل مدیریت خطا در json_decode مشکل بزرگی بود. و مشکل بزرگتر آنکه راه حلی که برای آن پیشنهاد شده بود دارای استثنا است. تابع json_decode در زمانی که json مشکل داشته باشد مقدار null را تولید می کرد، در حالی که مقدار null خود می تواند یک مقدار صحیح json باشد.
در این نسخه یک flag معرفی شده است که می توانید از آن به شکل برای مدیریت خطا استفاده نمایید.
try { json_decode("{", false, 512, JSON_THROW_ON_ERROR); } catch (\JsonException $exception) { echo $exception->getMessage(); // echoes "Syntax error" }
سازگاری با نسخه قبل:
اگر در کدتان ثابت JSON_THROW_ON_ERROR و یا کلاس JsonException را تعریف نکرده باشید هیچ مشکلی نخواهید داشت.
در نسخه های قبلی در صورتی که یک متغیر غیر قابل شمارش را به تابع count پاس می دادیم، با یک هشدار روبرو می شدیم. یک راه حل ساده بررسی قابل شمارش بودن متغیر است. متغیر قابل شمارش یک آرایه یا شی پیاده سازی شده وسط Countable است. این بررسی از این به بعد توسط تابع is_countable انجام خواهد شد.
سازگاری با نسخه قبل:
در صورتی که در کدتان تابع is_countable را تعریف نکرده باشید با مشکلی روبرو نخواهید شد.
در این نسخه تغییرات مهم و کاربردی دیگری هم داشتیم. مثل:
برای خواندن جزئیات بیشتر در مورد تغییرات این نسخه می توانید نوشته زیر در snippets.ir را بخوانید،
http://snippets.ir/1113/php-7-3-changlog.html
و یا RFC این نسخه را در سایت اصلی دنبال کنید.