تم إصدارPHP 5.3 alpha1 , ومع هذا الاصدار هناك العديد من المميزات المرتقبه من خلال باتشات والتي سوف تعتمد بشكل رسمي كما هو متوقع في الاصدار السادس
من PHP . سوف اذكر هنا بشكل مختصر بعضاً من تلك المميزات والتي حتماً ستنال إعجاب مبرمجي الـ PHP ..
فضاءات الاسماء (Namespaces) :
هذه الميزه تم الجدال كثيراً حول ضمن مجتمع PHP-DEV , ولكن في الاخير تم الاجماع على إضافتها وطريقه عملها .
مفهوم فضاءات الاسماء في الـ PHP لايختلف عن مفهومها في السي ++ او الـ C# فمن المعروف ان المزايا التي تقدمها لنا فضاءات الاسماء كمطورين هي السماح بتجميع مجموعه من العناصر مثل الاصناف والدوال ضمن اسم واحد , فبهذه طريقه يمكن ان يتم تقسيم المجال العام للاسماء General Scope الى مجالات فرعيه , مما يسمح لنا بإستخدام نفس الاسماء للاصناف مثلاً , ضمن فضاءات اسماء مختلفه .فمثلاً يمكن لنا ان نملك صنفين بإسم Connection , واحد تحت فضاء بإسم MySQL_Provider , والصنف الاخر بداخل الفضاء الـ SQLite_Provider مثلاً , فالتميز بين الاسمين المتشابهين للاصناف هنا يعتمد على فضاء الاسم التابع له ذلك الصنف . طبعاً يمكن عمل فضاءات للدوال والثوابت وليس فقط الاصناف .
مثال :
<?php
namespace App::MySQL_Provider;
class Connection {
function connect() {
echo "This is for MySQL";
}
}
namespace App::SQLite_Provider;
class Connection {
function connect() {
echo "This is for SQLite";
}
}
use App;
$mySQL_conn=new MySQL_Provider::Connection;
$sqlite_conn=new SQLite_Provider::Connection;
$mySQL_conn.connect();
$sqlite_conn.connect();
?>للمزيد :
http://ca3.php.net/language.namespaces
الربط الاستاتيكي المتأخر (Late static bindings)
تستخدم هذه الميزه للإشاره الى الصنف المستدعى في سياق الوراثه الاستايتكيه .
للتوضيح , لناخذ الكلمه (self:: or __CLASS__) والتي تعيدان اسم الصنف الحالي الذي نعمل عليه . في الواقع هاتان الكلمتان ستعيدان اسم الصنف الذي تكونان موجداتان فيه. لنأخذ هذا المثال :
<?php
class A {
public static function whoami() {
echo __CLASS__;
}
public static function getName() {
self::whoami();
}
}
class B extends A {
public static function whoami() {
echo __CLASS__;
}
}
B::getName();
?>المثال السابق سوف يكون خرجه A . نلاحظ هنا ان الربط حصل كان مبكراً , ولم يكن اثناء وقت التشغيل runtime .
لحل هذا القصور في ::self , تم تقديم ميزه استخدام الكلمه static:: , والتي تقوم بالاشاره في وقت التشغيل , بمعنى انك سوف تستطيع الان بإستخدام هذه الكلمه في المثال السابق ان تشير الى الصنف B عوضاً عن A وهذا مايدعى بـ Late binding هنا .
مثال :
<?php
class A {
public static function whoami() {
echo __CLASS__;
}
public static function getName() {
static::whoami(); //Late static binding
}
}
class B extends A {
public static function whoami() {
echo __CLASS__;
}
}
B::getName();
?>الخرج سيكون B
للمزيد :
http://ca.php.net/oop5.late-static-bindings
Lambda functions و الـ Closures
الـ Closures هي تدعيم إضافي لتقنية الـ Lambda functions او Anonymous functions في الـ PHP والتي تسمح لنا بإنشاء دوال بشكل In-line وهي موجود في لغة الجافاسكربت من قبل ولغات اخرى . من قبل في الـPHP , كان من الممكن انشاء هذا النوع من الدوال سابقاً بإستخدام الداله create_function او eval وهي مفيده في حالات عمل الـ callback . مثال على الطاير :
$lam=function () {echo "Hello unknow world !"; };
لإستدعاء الداله السابقه :
$lam();
او
call_user_func($lam)ايضاً هناك ميزه جديده وهي Closures وهي تستخدم بشكل مرن لتغير مجال الداله (function’s scope) بحيث يصبح من الممكن لها ان تصل الى متغيرات محدده لا يمكن بشكل طبيعي لهذه الداله ان تصل لها .
مثال :
<?php
class foo
{
public $bar = 5;
}
$foo = new foo;
$lambda = function() use ($foo) {
echo "Imported variable:".$foo->bar."\n";
$foo->bar++;
};
$lambda();
echo "Original variable: ".$foo->bar."\n";
?>في الواقع الـ Closures تقنية قديمة موجودة في بعض اللغات الوظيفية (Functional Language) مثل الـ ML و الـ Lisp , واستخدامها قد يبدو غريباً عن مبرمجي imperative
programming .
للمزيد
http://wiki.php.net/rfc/closures
Phar
من ضمن المميزات ايضاً هي ملفات الـ Phar وهي عباره عن شبيه بالـ JAR في الجافا .
Phar عباره عن ملفات مضغوطه يمكن ان تحتوي على تطبيقات PHP كامله بحيث يمكن الوصول الى ملف معين داخل هذا الملف بدون الحاجه الى فك الضغط يدوياً .
مثال :
<?php require 'phar:/www/pharfile.phar/dbscript.php'; ?>
للمزيد :
كانت هذه نبذه بسيطه عن اهم التقنيات التي رايتها مثيره والتي من المتوقع ان تكون رسميه في الاصدار السادس من الـ PHP .
هنئياً لكي يابيشو :) ..
