فروردین.10

چرا باید به PHP7 و بالاتر کوچ کنیم؟

چرا باید به PHP7 و بالاتر کوچ کنیم؟

پیشگفتار: خب اول از همه سلام خدمت شما. این اولین مطلب من هست توی سایت شخصی خودم، ممکنه تا آخر نوشته کلی اشکالات ریز و درشت از من ببینید که همین اول از شما معذرت خواهی میکنم.

اصل موضوع: خب اصل موضوع اینه که ما چرا باید به php 7 و یا بالاتر کوچ کنیم؟(موقعی که این مطلب رو مینویسم ورژن ۸ هم خیلی وقت میشه عرضه شده) اصلا چه اشکالی داره که با همون ورژن قدیمی (توی اینجا منظور ۵.۳ – ۵.۶ هست) به کارمون ادامه بدیم؟ اصولا چرا باید به فکر بروزرسانی و اصطلاحا آپگرید باشیم؟

جواب سوال: خب اصل موضوع اینه که همه موجودات در این جهان هستی رو به رشد هستن. توی دنیای تکنولوژی هم همینطور. هر روز یک ایده جدید و جذابتری به این دنیا اضافه میشه،‌ زبانهای برنامه نویسی هم از این مقوله مستثنی نیستن،‌ زبانهای جدید عرضه میشن و زبانهای قدیمی هم پیشرفت میکنن.

چرا باید php رو بروزرسانی کرد؟

از نظر من مسئله اصلی بر میگرده به استفاده کمتر از منابع سرور یا به اصطلاح چابک تر شدن. البته امنیت بیشتر و اضافه شدن قابلیت های جدید به برنامه برای سهولت هرچه بیشتر برنامه نویسی رو هم میشه نام برد.

سرعت عملکرد در ورژنهای مختلف php

اینجا مقایسه ای که توی سایت kinsta انجام شده واسه wordpress و woocommerce انجام شده که نشون میده چقدر میتونه تاثیر مثبتی داشته باشه.


نکته: توی این مقایسه بخاطر عدم پشتیبانی woocommerce 4.8 از ورژن 5.6 php توی نمودار نمایش داده نشده. میتونید مقایسه های دیگه ای که انجام شده رو توی سایت اصلی ببینید

تفاوت زمان بارگزاری وردپرس و ووکامرس در نسخه های مختلف php

تفاوتهای کد نوشتن در نسخه 5 و 7

۱ – تعیین نوع متغیر ورودی (Scalar type declarations)

برای نمونه این فانکشن مقدار $ints رو بصورت integer قبول میکنه

<?php
function functionName(int ...$ints){//get values as int

}

۲ – تعیین نوع بازگشتی (Return type declarations)

برای نمونه این فانکشن نوع مقداری که بر میگردونه قطعا integer خواهد بود

<?php 
function functionName($arguments) : int{ //always returns integer

}

۳ – ادغام پیش تعریف null [امیدوارم به ترجمه ها خرده نگیرید!] (Null coalescing operator)

برای مثال توی این کد مقدار $username ابتدا با متغیر $_GET[‘user’] مقایسه میشه و اگر نبود با متغیر $_POST[‘user’] و باز هم اگر نبود برابر با ‘nobody’ تغیین میشه.

<?php $username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';

۴ – مقایسه گر سفینه فضایی! (Spaceship operator)

مقایسه گر سفینه فضایی برای مقایسه کردن دو داده یا متغیر با نوع یکسان به کار میره. وقتی که متغیر اول $a بزرگتر از متغیر دوم $b باشه مقداری که بر میگرده 1 هست. در صورتی که برعکس باشه($a کوچکتر از $b) جواب -1 هست و در صورتی که مساوی باشن مقداری که بر میگرده برابر با 0 هست.
مثال:

<?php
// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1

۵ – تعریف ثابت‌های آرایه ای (Constant arrays using define)

مثال‌:‌

<?php 
define('ANIMALS', [
    'dog',
    'cat',
    'bird'
]);

۶ – کلاسهای ناشناس (Anonymous classes)

میتونیم بدون اینکه اسمی برای کلاسمون در نظر بگیریم اونو صدا کنیم

<?php $app->setLogger(new class implements Logger { ...

۷ – پشتیبانی از unicode (Unicode codepoint escape syntax)

توی این ورژن از php به راحتی میتونیم از کدهای unicode استفاده کنیم. دو نمونه مثال براتون میارم تا متوجه بشید.

<?php 
echo "\u{aa}"; //ª
echo "\u{0000aa}"; //ª
echo "\u{9999}";//香

echo "\u{1F602}"; // ?

۸ – کلاژر call ( Closure::call)

فراخوانی کلاس بطور مستقیم یا بدون نیاز به bind کردن

<?php 
class A {private $x = 1;}

// Pre PHP 7 code
$getX = function() {return $this->x;};
$getXCB = $getX->bindTo(new A, 'A'); // intermediate closure
echo $getXCB();

// PHP 7+ code
$getX = function() {return $this->x;};
echo $getX->call(new A);

۹ – فراخوانی گروهی (Group use declarations)

توی این ورژن میشه چندین کلاس با namespace های مشابه رو یکجا فراخوانی کرد

<?php
// Pre PHP 7 code
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;

use function some\namespace\fn_a;
use function some\namespace\fn_b;
use function some\namespace\fn_c;

use const some\namespace\ConstA;
use const some\namespace\ConstB;
use const some\namespace\ConstC;

// PHP 7+ code
use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};

خب این نوشته به پایان رسید امیدوارم تونسته باشم کمک کوچکی به یادگیری شما کرده باشم.

نکته پایانی: همیشه تلاش کنید که بروز باشید تا بتونید موفقیت های بیشتری کسب کنید

برنامه نویسی,php
Share this Story:
  • facebook
  • twitter
  • gplus

نظرات(3)

  1. hasti
    227787 days قبل

    عالی بود ممنون از اطلاعات تکمیلتون ??

  2. علیزاده
    227785 days قبل

    عالی بود، لطفا از php8 و تغییرات اون هم بزارید

نظر بدهید