ویژگی های جدید در PHP 7
php7 با عملکردی متفاوت و ویژگی های جدید و حذف برخی عملکرد های قدیمی به همراه تغییرات زیادی ارائه شد. بسیاری از ابزارهای زبان php نظیر WordPress , Laravel نیز از یه زمانی به بعد استفاده از خودشون رو بر اساس php7 به بعد قرار دادند.
Anonymous Classes
قابلیت ساخت کلاس بدون نام (Programmer Declared Name) یا کلاس ناشناخته با استفاده از کلمه کلیدی new که می توان آن را در یک متغیر قرار داد. عملکرد آن متغیر نسبت به یک متغیر دیگر که از یک کلاس با نام new شده است تفاوتی ندارد.
به عبارت دیگر می توان گفت گرامر (Syntax) همان کلاس عادی فقط بدون نام . Anonymous classes در موارد زیر مورد استفاده قرار می گیرد:
- زمانی که کلاس نیاز به مستند سازی ندارد( documented ).
- کلاس تنها یک بار در طول برنامه اجرا می گردد.
- تنهای یک شئ از کلاس قرار است ساخته شود.
$app = new class Logger { public function log(string $msg) { echo $msg; } }
CSPRNG Functions
توابع جدید برای ایجاد رشته و اعداد تصادفی :
- random_bytes : طول خروجی بایت را می گیرد و مقدار را تولید می کند. اگر با استفاده از تابع bin2hex می توانیم آن را به مبنای hexadecimal ببریم.
- random_int : بازه اعداد را می گیرد و با توجه به بازه اعداد عدد تصادفی صحیح را ایجاد می کند.
$random_bytes = random_bytes(5); echo $random_bytes; echo bin2hex($random_bytes); #--------------------------- echo random_int(100,999);
New Oprators
عملگر های جدیدی برای زیبا تر شدن کد و همچنین کارایی بهتر نظیر ??
, :?
, <=>
معرفی شدند.
Spaceship Operator : برای مقایسه کوچکتر یا بزرگتر بودن دو مقدار بر اساس جدول مقایسه نوع می باشد. خروجی این تابع 0 و 1 و -1 می باشد. 0 به ازای تساوی و 1 به ازای بزرگتر بودن پارامتر اول و -1 به ازای بزرگتر بودن پارامتر دوم.
// Integers echo 1 <=> 1; // 0 echo 1 <=> 2; // -1 echo 2 <=> 1; // 1 // Strings echo "a" <=> "a"; // 0 echo "a" <=> "b"; // -1 echo "aa" <=> "b"; //-1 echo "b" <=> "a"; // 1
Null coalescing : عملگری پرکاربرد برای مقدار دهی متغیر ها بر اساس دو متغیر دیگر . به طوری که اگر متغیر اول isset شده بود بر میگردد جهت مقدار دهی و در غیر این صورت متغیر دوم که مقدار پیش فرض هم است.
$username = $_GET['user'] ?? 'nobody'; // This is equivalent to: $username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
ternary operator : عملگری که هنگام مقدار دهی یک متغیر استفاده می شود. به طوری که اگر مقدار بازگشتی چیزی غیر از null و مقدار خالی بود برمی گرداند و در غیر اینصورت مقدار Default را بر می گرداند.
if(some_function() !== null){ $value = some_function(); }else{ $value = 'Default'; } //This is equivalent to: $value = some_function() ?: 'Default';
تفاوت ternary operator و null coalescing : عملگر ternary مقادیر تعریف نشده را بر نمی تابد و بر عکس null coalescing .
echo $c ?? 'a'; // a echo $c ?: 'a'; // Notice: Undefined variable: c in /in/apAIb on line 14
Scalar Type
که برخی جاها به آن Type hinting می گویند به شما این مجوز را می دهد که نوع داده متغیر یا پارامتر یا خروجی متد( Argument Type and Return Type) را مشخص کنید.
scalar technique
- None : یعنی نوع متغیر بر اساس عملگر مقدار.
- Coercive : در صورت مغایرت نوع متغیر ورودی مقدار را تبدیل می کند.مثلا فرض کنید یک تابع مقدار ورودی int می گیرد ولی ما به آن
'20'
را می دهیم. مقدار رشته به integer تبدیل می شود. - Strict : در صورت مغایرت نوع پارامتر ورودی خطا می دهد. این اتفاق با
declare(strict_types = 1)
انجام می پذیرد.
//declare(strict_types = 1); function add(int $a,int $b): int{ return $a+$b; } add(10,20); add(10,'20');
Constant arrays
می توان یک ثابت از نوع آرایه تعریف کرد. در ورژن های قبل PHP ما تنها قابلیت تعریف ثابت از نوع رشته یا عدد را داشتیم.
define('ANIMALS', array('dog','cat','bird' )); echo ANIMALS[1]; // outputs "cat"
Group use declarations
می توان در یک خط کد تعداد زیادی نشانه (namespace) را use کرد.
// pre PHP 7 use some\namespace\ClassA; use some\namespace\ClassB; use some\namespace\ClassC as C; // PHP 7+ code use some\namespace\{ClassA, ClassB, ClassC as C};
دیدگاهتان را بنویسید