از php 7.3 چخبر؟

خب قصد داریم که بصورت مختصر و کاربردی تغییرات نسخه php 7.3 رو بررسی کنیم. در این نسخه شاهد تغییرات زیادی بودیم که کاربردی ترین و تاثیر گذار ترین آن ها را بررسی می کنیم.

تغییرات نسخه 7.3 پی اچ پی
تغییرات نسخه 7.3 پی اچ پی

تغییرات در ساختار Heredoc و Nowdoc

احتمالا شما هم با ساختار های Heredoc و Nowdoc آشنا هستید و از آن ها استفاده کرده اید. اگر این اسم ها برای شما نا آشناست به مثالی از آن ها توجه کنید:

$foo = <<<IDENTIFIER
This is simple of heredoc and nowdoc syntax
"foo" bar;
IDENTIFIER

از این ساختار برای نگهداری رشته های چند خطی استفاده می شود. مهم ترین نکته اینست که IDENTIFIER پایانی حتما باید ابتدا خط باشد. بدین معنی که قبل از آن هیچ گونه کاراکتری مثل فاصله و یا تب نباید باشد. در نسخه جدید php این محدودیت رفع شده است که به هرچه زیباتر شدن کد با تورفتگی کمک می کند. تغییراتی که این ساختار در نسخه جدید داشته است به شرح ذیل می باشد:

  1. نیازی نیست IDENTIFIER پایانی ابتدا خط باشد.
  2. علامت IDENTIFIER پایانی می تواند با فاصله و تب تورفتگی داشته باشد.
  3. برای تورفتگی بصورت همزمان نمی توانید از فاصله و تب استفاده کنید.
  4. فاصله های قبل IDENTIFIER پایانی، از رشته داخل بلاک حذف می شوند.
  5. اگر تورفتگی علامت پایانی بیشتر از رشته داخل بلاک باشد خطا دریافت می کنید.
  6. با قوانین بالا شما می توانید از این ساختار داده در آرایه ها به شکل بهتری نیز استفاده کنید. به مثال زیر توجه کنید:
$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_encode و json_decode

در نسخه های قبل مدیریت خطا در 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 را تعریف نکرده باشید هیچ مشکلی نخواهید داشت.


معرفی تابع is_countable

در نسخه های قبلی در صورتی که یک متغیر غیر قابل شمارش را به تابع count پاس می دادیم، با یک هشدار روبرو می شدیم. یک راه حل ساده بررسی قابل شمارش بودن متغیر است. متغیر قابل شمارش یک آرایه یا شی پیاده سازی شده وسط Countable است. این بررسی از این به بعد توسط تابع is_countable انجام خواهد شد.

سازگاری با نسخه قبل:

در صورتی که در کدتان تابع is_countable را تعریف نکرده باشید با مشکلی روبرو نخواهید شد.


در این نسخه تغییرات مهم و کاربردی دیگری هم داشتیم. مثل:

  • Refrence در تابع list
  • معرفی توابع array_key_first و array_key_last
  • منقضی شدن ثابت های غیرحساس به حروف کوچک و بزرگ

برای خواندن جزئیات بیشتر در مورد تغییرات این نسخه می توانید نوشته زیر در snippets.ir را بخوانید،

http://snippets.ir/1113/php-7-3-changlog.html

و یا RFC این نسخه را در سایت اصلی دنبال کنید.

https://wiki.php.net/rfc#php_73