ما الجديد في PHP 5.3 – الجزء الأول 

بسم الله الرحمن الرحيم

علي الرغم من أن PHP 5.3 مازالت في الإصدار Beta لكن رأيت أن أضع هذه التدوينه لتعريف المبرمجين العرب بأحدث الخصائص الجديده المتوفره في هذا الإصدار الرائع من PHP والذي يتضمن العديد من الخصائص التي كانت مقرر توافرها في PHP 6

قبل البدء في الموضوع حمل PHP 5.3  لمستخدمي ويندوز أو لمستخدمي لينكس ثم قم بتنصيبها للتمكن من تجربه الخائص الجديده

Late Static Bindings
 لنستطيع فهم هذه الخاصيه سوف ننشئ كلاس A وكلاس B التابع لكلاس A

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        self::who();
    }
}

class B extends A {
    public static function who() {
         echo __CLASS__;
    }
}

B::test();
?>

ماذا تتوقع نتيجه تنفيذ الإسكربت ؟ طبعاً سيقوم بطباعه A لماذا ؟ لأن أي شئ يعرف كـ static سيتم تنفيذه في مكانه أي داخل كلاس حتي لو إستدعيناه من الكلاس B  لأن static لا تعترف بقواعد الوراثه أي يتم تنفيذه بمعزل عن السياق context .

إذن ما الجديد في PHP 5.3 ؟ الجديد هو وضع كلمه static ليتم التنفيذ داخل السياق

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        // لاحظ وضع كلمه static بدلاً من self
	static::who();
    }
}

class B extends A {
    public static function who() {
         echo __CLASS__;
    }
}

B::test();
?>

ماذا تتوقع الأن ؟ سيتم طباعه لأننا إستخدمنا  static بدلاً من self ليتم تنفيذ الداله في السياق وليس في مكان تعريفها

داله  __callStatic
هذه الداله مثل داله call__ المتواجده من قبل في PHP وتنفذ عند إستدعاء داله غير موجوده ولكن هذه الداله تنفذ عند إستدعاء داله static غير موجوده 

لهذه الداله أيضاً بارمتران الأول إسم الداله  المستدعاه والثاني مصفوفه تحمل بارمترات الداله المستدعاه

<?php
class MethodTest {
	/**  As of PHP 5.3.0  */
	public static function __callStatic($name, $arguments) {
		// to prefix your methods
		$newName = 'My' . $name;
		call_user_func_array(
			array('MethodTest', $newName),
			$arguments );
	}

	public function MyRunTest($param) {
		echo $param;
	};

}
// لا حظ أن هذه الداله ليس لها وجود
MethodTest::RunTest('أهلاً');
// نتيجه الأسكربت : طباعه أهلاُ
?>

Namespaces

سنتناولها في تدوينه قادمه نظراً لأنها تحتاج إلي كثير من الشرح

ملحوظه : لكي تفهم هذه التدوينه وتكملتها القادمه يجب أن تكون ملم بقواعد OOP .

المراجع :
http://www.php.net/docs.php

أترككم في رعايه الله

Advertisements