بسم الله الرحمن الرحيم
الحمدلله ، والصلاة والسلام على خير عباد الله ، محمد بن عبدالله ، وعلى آله وصحبه ومن والاه ، وبعد ؛
سنتحدث اليوم عن الإضافات التي يدرسها ويعمل عليها فريق PHP لتوفيرها في إصدار PHP الجديد ، PHP6 ..
هناك الكثير جداً من الإضافات والتخصيصات والتعديلات .. سنبدأ بذكرها واحدة تلو الأخرى ، وسأعمل جاهداً بإذن الله تعالى على تخصيص هذا الموضوع من حيث الردود بتزويده بأحدث المعلومات التي أصل إليها حول تلك الإضافات والتعديلات ..
ملاحظة: أتمنى أن يعلم الجميع الهدف من هذا الموضوع، فالهدف هو تمهيد برمجتنا نحو برمجة متناسبة مع الإصدارات الجديدة ، إذا توافقت برمجتنا من الآن مع PHP6 ، عندها لن نقلق من تعطّل سكربتاتنا في الإصدار الجديد. وكذلك كنظرة مستقبلية متفائلة نحو التطويرات القادمة
..
نبدأ بسم الله الرحمن الرحيم .. 
وداعاً Register Globals
كلنا نعلم مدى اعتماد الأحافير البي إتش باوية على خاصية Register Globals = On ، والتي يعود أصلها إلى PHP3 .. وكذلك نعلم مدى خطورة تفعيل خاصية Register Globals ..
Register Globals هي الخاصية التي تعمل على تسجيل المصفوفات الرئيسية :
كود:
$_GET
$_POST
$_FILES
$_COOKIE
$_REQUEST
$_SERVER
$_ENV
$_SESSION
حيث تستطيع الوصول إليها وكأنها متغيرات عادية ، أي كأنك قمت بتنفيذ الأمر extract على كل منها .. 
هذه الخاصية تم إلغاؤها في PHP6 ، حيث أنك لن تجدها حتى في خيارات PHP في ملف php.ini ولن تستطيع تفعيلها ..
والسبب هو الخطر الكبير الذي تؤدي إليه ، المصدر - المانيوال :
This feature has been DEPRECATED and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged.
وداعاً للمتغيرات الكبيرة الطويلة HTTP_*_VARS
في PHP6 سوف لن تستطيع عزيزي المبرمج الوصول إلى المتغيرات الكبرى التي تحمل الأسماء HTTP_*_VARS ، عليك باستخدام الصيغ التي تم اعتمادها منذ زمن ، مثل COOKIE_$ و SESSION_$ و POST_$ و GET_$ ، القسم السابق يوضّح بعض المعلومات حول هذا الموضوع ..
وداعاً Magic Quotes
أيضاً نقطة لصالحنا ، خاصية Magic Quotes ستودعنا في PHP6 ، وهي الخاصية التي تعمل على تجاهل النصوص المرسلة في PHP .. أي أن عملها مطابق لدالة addslashes إلا أنها تعمل بشكل تلقائي على النصوص المرسلة عبر النماذج . وهذا قد يسبب الكثير من المشاكل للمبرمجين .
هذه الخاصية لن تجدها في ملف php.ini أيضاً ، ولن تتمكن من تفعيلها في PHP6 .. كذلك استناداً للمانيوال ( PHP: Magic Quotes - Manual ) :
This feature has been DEPRECATED and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged.
هذا سيؤثر في الخيارات : magic_quotes ، magic_quotes_sybase ، و magic_quotes_gpc .
وداعاً للوضع الآمن Safe Mode
هاا ؟! السيف مود سيختفي أيضاً ؟؟؟
نعم سيختفي من PHP6 طبقاً لما ورد في المانيوال :
Safe Mode was removed in PHP 6.0.0.
لن يعد بإمكانك تشغيل الوضع الآمن في سيرفرك عند استخدامك للإصدار PHP6 .. ولن تجد الخيار أيضاً في php.ini ..
يا للمصيبة ! لغة PHP بدأت بالتدهور أمنياً .. !!
هذا ما قد تظنه للوهلة الاولى ، لكن مطوري لغة PHP يعلمون تماماً ما يفعلون ، فقد أوضحوا أن safe_mode لم يكن يعمل بالشكل المرغوب للحماية الكاملة ، فهو أصلح للمبتدئين لحماية سيرفراتهم .. أما الآن ، فلا داعٍ له ، يمكن للجميع استخدام open_basedir للحد من المجلدات التي يصل لها مبرمج السكربت .. وكذلك منع الدوال التي يرغب بمنعها .. لا تزال الحرية متاحة كالسابق في المنع والحماية .
وداعاً مكتبة Freetype 1 و GD 1
لا داعي للكلام الكثير هنا ، مكتبة Freetype 1 و GD 1 ، مكتبتان قديمتان جداً جداً وسيتم استئصالها من نسخة PHP ..
دالة ifsetor
دالة ifsetor الجديدة تفيد المبرمجين في تحديد قيم افتراضية للمتغيرات ، في السابق كنا نستخدم:
كود PHP:
$var = (isset($var) ? $var : 'default');
في نقاش PHP6 ، تم اقتراح دالة ifsetor التي ستريحنا في طريقة الكتابة ، فالكود السابق سيصبح:
كود PHP:
$var = ifsetor($var, 'default');
ومعناه : إذا لم يكن المتغير var$ يحمل قيمة ، اجعل قيمته default .
من الجدير بالذكر ، أن الاجتماع أفضى إلى عدم اعتماد هذه الخاصية ، على أغلب الأحوال لن ترى ifsetor في PHP6 ..
إذاً ، لماذا خصصت لها قسم من الموضوع ؟
اعتمد مطورو PHP أسلوب آخر لهذه العملية ،
كود PHP:
$var = (isset($var) ? $var : 'default');
في هذه الصيغة ، تم إسقاط " ضرورية " الباراميتر الأوسط ، فليس من المهم بعد اليوم أن تضع النتيجة في المنتصف، وذلك عن طريق معامل ?: ..
هذه الصيغة تتيح مجالاً أكبر من العمليات ، دون محدودية التحكم في ifsetor ..
المثال بعد التطوير:
كود PHP:
$var = (isset($var) ?: 'default');
عندما يكون المنتصف فارغاً ، لن يحدث شيئاً إذا كان المتغير يحمل قيمة في الأصل .. 
ربما نرى كمبرمجين أن صيغة ifsetor أسهل ، لكن الطريقة هذه معتمدة من قبل وأوسع وأشمل ..
إذا كنت ترغب باعتماد ifsetor خاصتك ، يمكنك صنع دالتك الخاصة:
كود PHP:
function ifsetor(&$var, $or) {
return (isset($var) ? $var : $or);
}
Goto وإضافتها إلى اللغة
كثيراً ما يحتاج مبرمجو لغات الويب أو الديكستوب إلى القفز إلى سطر معين في برنامجهم ، وفي ظل هذه الاحتياجات ، توفرت هذه الكلمات المحجوزة في بعض لغات البرمجة، فمثلاً :
كود:
print 'hello';
goto myLine;
print 'welcome';
myLine:
print 'This is my line';
عندما يصل معالج اللغة إلى goto سينتقل إلى السطر المحدد وهو هنا myLine مباشرة دون تنفيذ الكود الذي يتخللهما ..
هذه الصيغة لن تكون مدعومة في PHP6 ، نظراً لارتباطها بأمور سيئة مع لغات برمجة أخرى !
وحيث أن عملها مختلف في هذه اللغة الواسعة ، تم توسيع كلمة break لتتمكن من الانتقال إلى أسطر معينة كذلك ... وهنا مثال لاستخدام break الموسعة في PHP6 :
كود PHP:
<?php
for ($i = 0; $i < 9; $i++)
{
if (true) {
break blah;
}
echo "not shown";
blah:
echo "iteration $i\n";
}
?>
قد تكون هذه الخاصية مفيدة للمبرمجين إلا أني أرى أنها تحدث " حالة فوضى " في الكود البرمجي ، فقد تعودنا على الكود دونها ، فلا أرى لزوم استخدامها في سكربتاتنا .. من يدري ، قد أكون أول من يحتاجها
..
foreach الآن تتعامل مع المصفوفات متعددة الأبعاد
في السابق كنا نقوم بالآتي:
كود PHP:
$array = array(array('a', 'b'), array('c', 'd'));
foreach ($array as $val) {
list ($val1, $val2) = $val;
}
وبذلك نحصل على قيم المصفوفتين الداخليتين ، هذه المصفوفة ذات الأبعاد المتعددة ، سيمكنك التعامل معها بطرق أبسط وأسهل في PHP6 .
ما رأيك بهذا:
كود PHP:
$array = array(array('a', 'b'), array('c', 'd'));
foreach ($array as list($val1, $val2)) {
}
ستحصل على نفس القيم بهذه الطريقة ، يا إلهي ، هذه الطريقة ذات تأثير كبير جداً على مستقبل البرمجة . خطوة موفقة من فريق PHP . 
وداعاً {} ، و [] تتقدم !
أنعم النظر في المثال الآتي:
كود PHP:
$str = 'abcd';
echo $str{1};
الكود السابق سيطبع b ، لأن {} هي محددات تحدد المفتاح Index في المتغير النصي للتعامل معه .
نستخدم [] لنفس الغرض كذلك ،
فريق PHP قام بتجاهل {} في PHP5.1.0 وسيتم إزالة هذه المحددات بشكل كامل من PHP6 . عندها ، لن تستطيع التعامل معها أبداً .
في الوقت ذاته ، يطوّر فريق PHP المحددات [] لتعمل بشكل رهيب ، الخطوة هذه غير مسبوقة وستسهّل علينا الكثير الكثير ، وأنا أعني ما أقول .
الآن هذا المحدد سيعمل عمل دالتي array_slice, substr ، هذا يعني أنه يمكنك تناول جزءاً من متغير نصي أو مصفوفة دون التطرق إلى الدوال السابقة .. كيف ؟
كود PHP:
$str = 'this is my text';
echo $str[2,];
هذا سيأخذ من الحرف ( أو عنصر المصفوفة ) الثاني إلى النهاية ..
يمكن التحديد برقمين 1,2 مثلاً ، يمكن كذلك وضع أرقام سالبة ، ستعمل تماماً كعمل array_slice إن كانت مصفوفة ، و substr إن كان نصاً ، وإن لم تحدد نقطة البداية ، سيبدأ من 0 .
بهذه الشروط ، سيسلك المتغير النصي بالشكل التالي مسلكاً جديداً :
كود PHP:
$str = 'tex';
$str[] = 't';
عندها سيحوي المتغير القيمة text ، هذا يعني أن [] ستعمل كعمل المعامل .= على النصوص .. عملها أصبح شبيهاً بعملها مع المصفوفات ..
تعديل سلوك Microtime الافتراضي
إذا كنت من مستخدمي دالة microtime في لغة PHP على المدى السابق ، ستدرك فوراً الفرق بين microtime في الإصدارات السابقة وهذا الإصدار .
منذ أ، وجدت دالة microtime كانت تعيد نتيجة نصية String تحوي أجزاء الثانية متبوعة بمسافة ، ثم الوقت بنسق Unix Timestamp ، مثال:
كود:
0.75000200 1211460710
كنا في السابق للحصول على الوقت الحالي بالثواني وأجزائها ، نقول بتجزئة النتيجة ونجمعها ..
كود PHP:
$micro = explode(' ', microtime());
$microtime = $micro[0] + $micro[1];
لكن ، في PHP5 ، تمت إضافة باراميتر جديدة لهذه الدالة ، والباراميتر الوحيد لها .. حيث أنه إذا أخذ القيمة true سيعيد الناتج على شكل Float ( بالشكل الذي حصلنا عليه في المثال الأخير ) ..
فالمثال التالي في PHP5 مشابه للمثال السابق :
كود PHP:
$microtime = microtime(true);
أما في PHP6 ، ففريق PHP قام بجعل القيمة الافتراضية لهذا الباراميتر هي true ، أي أن :
كود:
microtime() = microtime(true)
هذا في PHP6 ، طبعاً السابق ليس كود PHP ، فقط توضيح ..
( طيب واللي استخدم طريقة explode وجمع الجزئين ؟!!! يعني كل السكربتات اللي تستخدمه رح تخرب ؟!!! )
دعونا ننفذ الكود نفسه في PHP6 :
كود PHP:
$micro = explode(' ', microtime());
$microtime = $micro[0] + $micro[1];
السطر الأول سيعيد لنا مصفوفة تحتوي عنصراً واحداً ، حيث أن النتيجة ستكون مثلاً :
وهي لا تحوي أي مسافة كي يتم التقسيم من عندها .. إذاً العنصر 0 سيتم جمعه مع العنصر 1 ، العنصر 1 غير موجود ، فالنتيجة هي العنصر 0 ..
لكن عند الجمع مع العنصر 1 ستظهر رسالة خطأ من نوع Notice ، لأن العنصر الثاني غير موجود ..
هذه الرسالة لن تؤثر في عمل السكربت ، عموماً يجب علينا تغيير طريقتنا في التعامل مع هذه الدالة من الآن بتفعيل الباراميتر بالقيمة true حتى تعمل بكفاء في PHP5 و PHP6 .. ووداعاً PHP4 ..
وداعاً <%
من منا لم يستخدم <% في سكربتاتنا ؟ << كلنا
..!
كلنا درسنا في بداية مسيرتنا البرمجية أن <% و %> تعملان عمل <?php و ?> .. هذا إن كانت مفعلة في خيارات php.ini ..
لكني شخصياً لم أحتجها يوماً من الأيام ، هذه الصيغة تم إسقاطها من لغة PHP .. مع الاحتفاظ بـ <? وبقية الوسوم .. 
النتيجة: صيغة وسوم ASP لم تعد متاحة لكتابة سكربتات PHP ..
إضافة APC إلى النسخة الرسمية
حسب رغبات مستخدمي لغة PHP ، قام فريق PHP بتضمين نظام الكاش المعروف APC في ملفات النسخة الرسمية من الإصدار الجديد PHP6 . هذه المكتبة ستكون معطلة افتراضياً ، لكنها ستتوافر ضمنياً .
قارئ/كاتب XML في النسخة الرسمية
وتدخل مكتبة XMLReader و XMLWriter في توزيعة PHP الجديدة رسمياً ، وستكون مفعلة في الوضع الافتراضي في PHP6 .
ستسهّل هاتان المكتبتان الكثير من التعاملات مع ملفات XML من كتابة وقراءة .. 
Ereg ستخرج إلى PECL
قام فريق PHP بتحويل ereg إلى امتداد Extension ، وبوجود مكتبة PCRE والتي سوف لن تكون قابلة للتعطيل ، يمكن الاستغناء عن امتداد ereg ونقله إلى مكتبة PECL للامتدادات .. 
عليك عزيزي المبرمج الانتقال فوراً للبرمجة باستخدام مكتبة PCRE بدوال preg .. فهي التي نثق بوجودها مستقبلاً في إصدارات PHP .
ويتّضح أن هناك امتداد جديد للتعامل مع التعابير القياسية ، غير PCRE و ereg ، بالاعتماد على ICU .. لكني لا أعلم عنه شيئاً حتى الآن .
الخاتمة Conclusion
لست بصدد إنهاء الموضوع بشكل كلي ، فالتطويرات والتغييرات في PHP6 ليست مقتصرة على ما ذكرت هنا، وإنما هي تغييرات كثيرة هذا ما استطعت نقله منها حتى الآن ، وحتى أضمن قراءة الأعضاء لمعظم هذه الميزات الجديدة والتعديلات ، لم أرغب بالتأخر في طرح الموضوع ..
لم أذكر التغييرات في OO مع أنها ليست بالقليلة ، ولم أتطرق للـ Unicode ولا Namespace لأن الأخ عبدالله عيد تحدّث عنها في إحدى المواضيع ، فلم أرغب بتكرارها ..
من يجد لديه بعض المعلومات غير المذكورة ، ومن يرى أنه لم يفهم إحدى الخصائص والتغييرات فليبادر بالرد بالاستفسار أو الإضافة مشكوراً .. 
الموضوع سيتجدد كلما توفر الوقت بإذن الله تعالى .. وسيبقى مفتوحاً للحديث والنقاش ..
أطيب التحيات، أشرف السمهوري