Object-Oriented PHP
الدرس الثاني Key OOP Concepts
إعادة التحميل للخاصية Property Overloading
يتم إعادة تحميل الـ protected method عند الدخول إليها أو معالجتها عبر public method وبهذا الاسلوب يكون الوصول للبيانات في هذه الدوال المحمية كأنها عامة.
ولسوء الحظ الـ php لا توفر هذه الخاصية لذلك نستخدم دوال عامة للتعامل مع مثل هذه التقنية مثلا تقوم بإنشاء getter and setter methods .
PHP v 5.X
مكنت خاصية الـ overloading عن طريق __set and __get تنفذ هذه الدوال عند التعامل مع خواص غير موجودة في الكلاس ، لذلك تستخدم هذه الخاصية في إظهار الأخطاء بالاضافة لتوسيع الكلاسات أثناء المعالجة بإنشاء متغيرات جديدة وسوف نناقش هذه الدوال في هذا الدرس إن شاء الله.
Setting Properties with the __set() Method
وتعرف بـ mutator, or setter method وهي مسؤولة عن إخفاء تعيين الخاصية والتحقق من من البيانات قبل تعيينها لمتغير او خاصية وصيغتها العامة كالتالي:
الدالة __set() تأخذ متغيرين وترجع قيمة منطقيةboolean __set([string property_name],[mixed value_to_assign])
فالكلمة boolean تعني أن الدالة ترجع قيمة منطقية TRUE or FLASE
والكلمة property_name تعني أن إسم الخاصية ( المتغير ) يكون String
والكلمة value_to_assign تعني القيمة وتكون أي نوع (Arrays, String, Integer ...etc).
مثال لها:
class Employee
{
var $name;
function __set($propName, $propValue)
{
echo "Nonexistent variable: \$$propName!";
}
}
$employee = new Employee ();
$employee->name = "Mario";
$employee->title = "Executive Chef";
{
var $name;
function __set($propName, $propValue)
{
echo "Nonexistent variable: \$$propName!";
}
}
$employee = new Employee ();
$employee->name = "Mario";
$employee->title = "Executive Chef";
الخرج يكون كالتالي:
Nonexistent variable: $title!
وهذا المثال لإكتشاف الخطأ وإرجاع رسالة أن هنالك مشكلة في إسناد خاصي ماوالسبب هنا ان الخاصية title غير معرفة في الكﻻس.
مثال آخر على توسعة الكﻻس:
مثال آخر على توسعة الكﻻس:
class Employee
{ public $name;
function __set($propName, $propValue)
{
$this->$propName = $propValue;
}
}
$employee = new Employee();
$employee->name = "Mario";
$employee->title = "Executive Chef";
echo "Name: ".$employee->name;
echo "<br />";
echo "Title: ".$employee->title;
والخرج هنا يكون كالتالي
Name: Mario
Title: Executive Chef
Getting Properties with the __get() Method
تعرف بـ accessor, or mutatget وهي المسؤولة عن التغليف والتعليمات البرمجية المطلوبة لاسترجاع متغير من الكﻻس والصيغة العامة لها:
boolean __get([string property_name])
الدالة __get() تأخذ متغير واحد
فالكلمة boolean تأخذ قيمة TRUE عند نجاح عمليةإرجاع القيمة المطلوبة و FALSE عند فشل العملية
فالكلمة boolean تأخذ قيمة TRUE عند نجاح عمليةإرجاع القيمة المطلوبة و FALSE عند فشل العملية
class Employee
{
public $name;
public $city;
protected $wage;
function __get($propName)
{
echo "__get called!<br />";
$vars = array("name","city");
if (in_array($propName, $vars))
{
return $this->$propName;
} else {
return "No such variable!";
}
}
}
$employee = new Employee();
$employee->name = "Mario";
echo $employee->name."<br />";
echo $employee->age;
يكون الخرج في هذا الكود :
Mario
__get called!
No such variable!
إلى هذه النقطة نكون قد وصلنا إلى نهاية درس اليوم موعدنا يوم السبت من الاسبوع القادم ان شاء الله


