What’s New in PHP 7: Things You Should Know بالعربي

Standard

PHP 7.0 على الأبواب خلاص ومخطط نزول النسخة النهائية Stable Release في شهر نوفمبر 2015 ومعاه بقة شوية حاجات جامدة جدا وهتفرق بشكل ملحوظ في الشغل وفي المقال دي هحاول أجمع الحاجات المهمة اللي محتاج تعرفها.

هو مش أخر حاجة PHP 5.6 ! نطوا لـ 7 مرة واحدة كده ؟!!!

دي أول حاجة هتلاحظها إن أخر نسخة Stable شغالة هي 5.6 والنسخة الجديدة اللي هتنزل هي 7.0 !!! الحقيقة إن PHP 6.0 بقالها كذا سنة تحت التطوير وبسبب كمية الحاجات اللي إتضافت والتعديدلات الضخمة، طولت مدة التطوير ودا اللي خلى فريق التطوير يقرر ينط لـ 7.0 مرة واحدة … عديها وخلاص هي جت على مايكروسوفت يعني 😀

Windows 64-bit Support … أخيييييرا

يااااااااااااه أخيرا … من زمان وفي نسخة رسمي 64-bit للـ Unix-like Systems زي Linux و Mac OS وبعد طول إنتظار هيبقة في دعم رسمي وكامل لنسخة Windows 64-bit ودي كانت نقطة ضعف للناس اللي شغالة على سيرفرات Windows … كان في إجتهادات من ناس عملت Fork وطلعت نخسة 64-bit بس مكنتش Stable وتقدر تعتمد عليها قوي يعني … بس دي حلاوة الـ Open Source اتعمل كمية Contributions عشان الموضوع ده.

كل الـ Deprecated Functions and Extensions أتشالت خلاص

كان في كمية functions و Extensions متعلم عليهم أنهم بقت Deprecated وفي النسخة دي أتشالوا خلاص ولو انت مكنت واخد بالك من الحاجات دي وواخد في الإعتبار الـ Best Practices وكنت بتستخدم حاجات زي mysql extension مثلا يبقة لو عملت Upgrade هتلبس يا معلم وشغلك كله هيقف … دي لستة بالحاجات اللي اتشالت :
APIs, Extensions
deprecated functionalities

Big Performance Boost

فرق الـ Performance اللي حتى أتجرب على النسخ الـ Beta مبشرة جدا … حوالي 2 : 3 أضعاف السرعة ودا حتى في حاجات أسرع من HHVM اللي بيستخدمه الـ Facebook نفسه
PHP7 Performance

Zend Engine جديد

النسخ الحالية بتستخدم Zend Engine 2 إنما PHP 7.0 هيبقة شغال بـ Zend Engine 3 ودا بيتضمن تحسينات كبيرة في الـ Memory & Resources Management و الـ Object Models وحاجات تانية هتساعد في عمل Extensions بطريقة أفضل وبكفاءة أعلى.

Abstract Syntax Tree

هي طريقة جديدة في عملية الـ Compile بحيث تتيح Syntax جديد عن طريق انه مبيستناش الكود يعدي على الـ Parser عشان يطلع الـ Opcode منه إنما بيتعامل معاه مباشر وبيعمله Representation على طول .. ودا تغيير جذري مهم جدا.

Return Type Declarations

اللي بيشتغل بلغات Strong Typed هيعجبه الحتة دي … هي بتيح أنك تحدد ايه Data Type اللي بترجعها الـ Function بحيث لو انت عاوز اللي بيستخدم الكود بتاعك يلتزم بحاجات انت حاططتها عشان الدنيا تمشي مظبوط … انا عن نفسي مبحبش الطريقة دي بس في ناس كتير مفتقدة النقطة دي.

<?php
function values_to_array(): array {
    return func_get_args();
}

interface User_Interface
{
    public function get_native_object(): WP_User;
}

class App_User implements User_Interface
{
    public function get_native_object(): WP_User
    {
        return new WP_User( $this->ID );
    }
}

Combined Comparison Operator

الـ Operator “< =>” ده حلو جدا بيساعد على اختصار العمليات لإنه بيقارن بين رقمين ونتيحة الـ “Evaluation” بيرجه “1” أو “0” أو “-1” دا بيبقة نتيجة المقارنة زي ما في المثال ده:
PHP RFC: Combined Comparison “Spaceship” Operator

Combined Comparison "Spaceship" Operator

Null Coalesce Operator

اللي بيشتغل Javascript هيعجبه الحتة دي قوي لإنها موجودة في الـ Javascript ومفيدة جدا وهي عبارة عن انك بتقرا قيمة variable في احتمال انه مبيبقاش موجود وبتحطله Default Value لو هو مش متعرف او مش موجود ودي طبعا بتحصل كتير

<?php

// get data from GET
// PHP < 7.0 $user_id = isset( $_GET['id'] ) ? $_GET['id'] : null; // now that kind of condition can be shorthanded // PHP >= 7.0
$user_id = $_GET['id'] ?? null;

//

Bind Closure on Call

دي طريقة عشان تنده على function متعرفة لواحدها وكإنها Method من Object أو كأنك بتحطها جوه الـ Scope بتاع الـ Object ودي عملية بتقال عليها Closure Binding

<?php

class WP_User 
{
    protected $first_name;
    protected $last_name;

    public function __construct( $first_name, $last_name ) 
    {
        $this->first_name = $first_name;
        $this->last_name = $last_name;
    }
}

$user_display_name = function ( $format = '%s %s' ) {
    return sprintf( $format, $this->first_name, $this->last_name );
}

$user = new WP_User( 'Jon', 'Doe' );
echo $user_display_name->call( $user );                  // outputs "Jon Doe"
echo $user_display_name->call( $user, '%2$s, %1$s' );    // outputs "Doe, Jon"

//

Shared Parent Class in Exception Handling

في النسخة الجديدة هيبقة في طريقة جديدة للـ Exception Handling وهي PHP RFC: Exceptions in the Engine وهو بإختصار بيقدم Base Class جديدة بإمكانيات أحسن تساعد في الـ Debugging والـ traceback. الحاجات القديمة موجود زي ما هية عشان الـ Applications الي معمولة على نسخة أقدم من 7.0 تشتغل من غير مشكلة.

<?php

try 
{
    some_functions(); // undefined functions
} 
catch ( EngineException $ex ) 
{
    echo "Exception: {$ex->getMessage()}\n";
}

//

Unicode Codepoint Escape Syntax

وهي طريقة عشان تكتب حروف اللغات الغير الإنجليزية بشكل الـ Unicode بتعها عشان تضمن أنها تبقة شغالة كويس من غير ما تشغل بالك بالـ Character Encoding بتاع الـ File اللي بتكتب فيه وده كمان لإن ممكن نفس الحرف يتكتب بكذا طريقة بالـ Unicode وده عن طريق Escape Character جديد اتضاف وهو “u\”

<?php

// "ñ" Character can be typed with two methods
echo "mañana";
echo "mañana";

echo "ma\u{00F1}ana"; // pre-composed character
echo "man\u{0303}ana"; // "n" with combining "~" character (U+0303)

//

Uniform Variable Syntax

هي طريقة في كتابة الـ variables جديدة أتحطت مع القديمة عادي بتتيح مثلا أنك تعمل على Nested Static Methods Calls و Nested Functions Calls و ممكن تعمل Self-Executed Anonymous Function زي اللي موجودة في الـ Javascript بالظبط.

<?php

// Self-Executed Anonymous Function
(function() { ... })()
($obj->closure)()

// support nested functions/callbacks calls
foo()()
$foo->bar()()
Foo::bar()()
$foo()()

// support nested static methods calls
$foo['bar']::$baz
$foo::$bar::$baz
$foo->bar()::baz()

//

Anonymous Classes

زي ما فيه Anonymous Functions فيه برده Anonymous Class دي فايدتها زي فايدة الـ Anonymous Functions بالظبط … بتخليك تقدر تعمل Class ملهاش أسم عشان تباصيها كـ Parameter لـ Function مثلا. ده طبعا بإفتراض انك مش هتبقة محتاج الـ Class دي بعد كده في حتة تانية غير جوا الـ Function بس.

<?php

// Old Methods
// PHP < 7.0 class MyProgram extends ConsoleProgram { public function bootstrap() { /* ... */ } } $program = new MyProgram(); $program->bootstrap();

// New Method
// PHP >= 7.0
/* implementing an anonymous console object from your framework maybe */
( new class extends ConsoleProgram {
    public function bootstrap() 
    {
        /* ... */
    }
} )->bootstrap();
 
// Old Methods
// PHP < 7.0 class MyPage implements Page { public function __construct( $controller ) { /* ... */ } } function my_page_class() { return MyPage; } // New Method // PHP >= 7.0
/* return an anonymous implementation of a Page for your MVC framework */
function my_page_class()
{
    return new class( $controller ) implements Page {
        public function __construct( $controller ) {
            /* ... */
        }
    };
}

//

Group Use Declarations

هي عبارة عن إختصار لعملية الـ use اللي بتتعمل لحاجات في النفس الـ Namespace في سطر واحد بدل كذا سطر.

<?php

// Old Methods
// PHP < 7.0 use MyLibrary\Components\User; use MyLibrary\Components\Book; use MyLibrary\Components\Author; use MyLibrary\Components\Company as Publisher // New Method // PHP >= 7.0
use MyLibrary\Components\{ User, Book, Author, Company as Publisher };

//

كل النقط دي موجود بالتفصيل في الـ RFC على موقع PHP نفسه لو حابب تعرف الحاجة بتفاصيل زيادة
PHP RFC: Implemented in PHP 7.0

2 thoughts on “What’s New in PHP 7: Things You Should Know بالعربي

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.