سوف أحاول هنا تقديم بعض ما استوعبته عن برمجة الكائنات PHP5
الرجاء تصحيحي في حالة ورود بعض الأخطاء.
ربما لا أوفق في توضيح بعض المسميات باللغة العربية
لأنني تعمقت في دراستها بالإنجليزية
بسم الله الرحمن الرحيم
لنبدأ الآن
سوف أحاول هنا تقديم بعض ما استوعبته عن برمجة الكائنات PHP5
الرجاء تصحيحي في حالة ورود بعض الأخطاء.
ربما لا أوفق في توضيح بعض المسميات باللغة العربية
لأنني تعمقت في دراستها بالإنجليزية
بسم الله الرحمن الرحيم
لنبدأ الآن
تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية
البرمجة ستكون متاحة للتحميل حال إعتماد النسخة
أولا : برمجة الكائنات ظهرت بصورة مختصرة في PHP3 تم تطويرها بـ PHP4 و تم برمجة العديد من الموقع عليها مثل موقع زووبس الشهير. و لكن بنزول النسخة PHP5 أصبحت مطلب من جميع المبرمجين. و يتوقع حدوث ثورة برمجية عند النزول المتوقعة لـ PHP6
ثانياً : برمجة الكائنات ليست لديها علاقة بـ PHP بل مصدرها الأصلي هو C و JAVA لذا لو كان ليس لديك إلمام بـبرمجة PHP فلا تتوقع برمج سطر واحد. يعني أن برمجة الكائنات عبارة عن فكرة مطورة و سلسة لتنفيذ أفكارك البرمجية و لكنها ليست هي من صميم PHP البتة.
يتم عمل الكائنات عن طريق الكلاسات و بعض الدوال عن طريق الـ FUNCTIONS
و يتم كتابة هذه الكلاسات كما يلي :
class xxx {
//do some thing here
}لاحظ أننا عند كتابتنا لـ class قمنا بإدراج اسم الكلاس
و ما بين القوسين سيتم إدراج أكواد الـ php
و سيبقى السؤال ما هي نوعية الأكواد التي سوف نقوم بإدراجها أو إنشاءها بين أواس الكلاس
تم تعديل هذه المشاركة بواسطة vivid في 27 ديسمبر 2007 في 11:12
تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية
البرمجة ستكون متاحة للتحميل حال إعتماد النسخة
قبل أن نعرف كيفية تنفيز أكواد php بين محتوى الكلاس
يجب معرفة كيفية استدعاء تلك الأكواد و إخراج نتيجة تلك الأكواد على أساس تعطينا الشيء الذي نريده في النهاية
و ذلك يتم عبر استخدام كائن يتم استخدامه من قبل المبرمج على شرط أن تتقدمه علامة الدولار
$obj = new xxx(); //بالأسف سوف يتم استدعاء الفنكشن و محتوياتها. سوف نعرف ذلك مستقبلا
لاحظ :
* لقد قمنا بكتابة الكائن تسبقه علامة الدولار.
* بعدها قمنا بإدراج عللامة =
* ثم التابع new وهو التابع الذي سوف نستخدمه دوماً في استدعاء الكلاسات.
* ثم اسم الكلاس مربوط بين قوسين.
* في النهاية يتوجب إدراج الفاصلة المنقوطة.
ليصبح شكل الكلاس النهائي
class xxx {
//do something here
}
$obj = new xxx();تم تعديل هذه المشاركة بواسطة vivid في 27 ديسمبر 2007 في 11:24
تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية
البرمجة ستكون متاحة للتحميل حال إعتماد النسخة
نأتي هنا لمعرفة ما يخيف الجميع من اقتحام برمجة الكائنات
يجب التدقيق جيدا حتى نقوم بإستيعاب ذلك سوية
بعض الملاحظات :
* تحتاج لتنظيم أفكارك جيداً لأن ما تكتبه من خصائص ضمن محتوى الكلاس يجب أن يكون ذا صلة. يعني كلمة (ألوان) تتكون من أعداد لاحصر لها من الألوان مثل الأحم - الأخضر - إلخ إلخ إلخ. يعني رتب أفكارك و أجعل كل ما تريده له علاقة بين بعضه البعض.
* دعونا ننسى php4 لأنه قد تم تعطيلها رسميا من موقع php.net .
* بالنسبة لـ php4 فإنها تستعي خصائصها بالمتغير var
class xxx{
var $username
function BringUsername(){
// do something here
}
}
$obj = new xxx();* سوف نقوم بإيقاف التعامل مع php4 و نسير في الركب مع php5
تم تعديل هذه المشاركة بواسطة vivid في 27 ديسمبر 2007 في 11:39
تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية
البرمجة ستكون متاحة للتحميل حال إعتماد النسخة
بـ php5 تم انشاء خصائص أخرى غير var المستخدم بـ php5
و هي :
public
protect
private
تسبق المتغيرات بدل var
class Registration{
public $username
public $password
public $email
private $id
protected $ip
}
$user = new Registration();تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية
البرمجة ستكون متاحة للتحميل حال إعتماد النسخة
إلى الآن كلاساتنا عديمة الجدوى لأننا لم نعطيها قيم حقيقية و لكن هي محاولة منا لمعرفة كيفية التنسيق قبل الانتقال للمراحل المهمة.
كيفية استخدام public
عند استخدام public يتم استدعاء المتغير اللي بعديها من خارج الكلاس
عند استخدام protect يتم استدعاء المتغير اللي بعديها من داخل الكلاس
عند استخدام private يتم استدعاء المتغير اللي بعديها من خارج الكلاس
ملحوظة : ما هو الفرق بين protect و private ما دام ان الإثنين يتم استدعائهم من داخل الكلاس؟
الإجابة أن المتغير بعد protect يمكن استخدامه و توريثه في كلاسات أخرى و أيضا يكون داخل تلك الكلاسات و ليس خارجها. بينما private تنحصر استخداماتها في كلاس واحد فقط و لا يتم توريثها إلى أي كلاس آخر.
سوف نعرف مدى سهولة ذلك من خلال دخولنا في اللحم الحي
تم تعديل هذه المشاركة بواسطة vivid في 27 ديسمبر 2007 في 12:03
تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية
البرمجة ستكون متاحة للتحميل حال إعتماد النسخة
الآن سوف ندخل في اللحم الحي
و سوف نجني ثمار جهدنا
<?php
class Register{
public $name;
public $username;
function getName($name){
return $this->name = $name;
}
function getUsername($username){
return $this->username = $username;
}
}
$user = new Register();
$user->getName("ali");
$user->getUsername("Omer");
print $user->getName("ali\n");
print $user->getUsername("Omer");
?>ملاحظات هامة جدا جدا جدا جدا
* كلمة فنكشن هنا هي أسلوب ترجمة المتغيرات التي بأسف كلمة كلاس
* يتم كتابة function بعدها اسم الـ function ثم أقواس يتم كتابة المتغير الذي يراد تفكيك أواصره بداخلها و في بعض الأحيان تترك فارغة في حالة تم تعريف المتغير مسبقا. ثم يتم اضافة الأقواس المعقوفة لفصل أسلوب الفنكشن عن جسد الكلاس.
* return يعمل على إعادة القيمة المرادة.
* $this إشارة للمتغير المراد تفكيكه.
* التابع -> هام جدا يتم توجيهه للمتغير و أن النتغير الذي بعده يجب أن لا يحمل علامة الدولار بإعتبار أن $this قد حملة علامة الدولا قبله.
عند استدعائنا بالأسفل على محتوى الكلاس قمنا بإدراج اسم القيم المرد استجلابها داخل أقواس الكلاس بدل المتغيرين $name و $username
* قمنا بطباعة المتغيرين بكل سهولة عن طريق الأمر print
* لا تنسى أن الكائن $user يجب أن يليه التابع -> ثم اسم الفنكشن مع يحتويه من متغير. مع استبدال اسم المتغير بالغيمة التي تريدها في حالة استدعت الضرورة ذلك
تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية
البرمجة ستكون متاحة للتحميل حال إعتماد النسخة
لاحظ في المثال الآخير أننا استخدمنا الأمر public أسفل الكلاس
كما استخدمناه بطريقة غير مباشرة أمام function
لأنك عند كتابتك لكلمة function دون تحديدلها مثل
function Username(){
//do something
}فإن الاسكريبت سيترجمها كالآتي :
public function Username(){
//do something
}لذلك استدعينا الكلاس و الفنكشن خرج الكلاس
تم تعديل هذه المشاركة بواسطة vivid في 27 ديسمبر 2007 في 19:47
تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية
البرمجة ستكون متاحة للتحميل حال إعتماد النسخة
الآن سوف نقوم استدعاء الكلاس من الداخل عن طريق الأمر protected و private
لاحظ التالي :
<?php
class Register{
protected $name;
protected $username;
protected function Name($name){
$this->name = $name;
print $this->name;
}
protected function Username($username){
$this->username = $username;
print $this->username;
}
public function BothNameAndUsername($name, $username){
$this->name($name);
$this->username($username);
}
}
$user = new Register();
$user->BothNameAndUsername("Ali", "Omer");
?>وضعنا أما الفنكشن كلمة protected
لذا يتوجب علينا طلبها من داخل الكلاس و ليس من خارجه
و لو حاولنا طلب أي فنكشن تحمل أمامها الأمر protected من خارج الكلاس سوف تأتيك رسالة خطأ
و هنا قمنا فقط الفنكشن رقم 3 و التي تحمل أمامها الأمر public
و استدعت لينا بطريقة غير مباشرة الفنكشن الخاص بـ protected
سوف أعود لذلك بشرح وافي
تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية
البرمجة ستكون متاحة للتحميل حال إعتماد النسخة
كما قد أوضحت لكم
public خاصة بالطلب من خارج الكلاس
protected من داخل الكلاس + أنها قابلة للتوريث (سنرى ذلك قريبا).
private من داخل الكلاس
و في المثال الآخير الذي يتكون من ثلاث function
في الأولى التي تحمل أمامها protected طلبناها من الداخل
و استدعينا
$this->name = $name; print $this->name;
لاحظ سوف تكون النتيجة طباعة لـ $name
و كذلك في الـ function الثاني طلبناه من الداخل
$this->username = $username; print $this->username;
لاحظ سوف تكون النتيجة طباعة $username
و في الـ function الثالث
كان الطلب من الخارج مع توضيح ما نريده
$user->BothNameAndUsername("Ali", "Omer");فقام الاسكريبت بقراءة الفنكشن الأول و الثاني
و عرف ما نريد
و ترجمها كما نريد
و لكن لو قمنا بكتابة
$user->Name($name); $user->Username($username);
من الخارج
سوف تأتينا رسالة خطأ
Fatal error: Call to protected method Register::Name() from context '' in D:\wamp\www\test\001.php on line 22
كما يمكننا توريثها و تسليمها إلى كلاس آخر للاستعانة بها عند الضرورة
سامحوني يا إخوان
ربما أنا لا أجيد توصيل المعلومة جيدا
لكنني أردت توصيل و لو جزء يسير من برمجة الكائنات المزهلة
تم تعديل هذه المشاركة بواسطة vivid في 29 ديسمبر 2007 في 09:13
تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية
البرمجة ستكون متاحة للتحميل حال إعتماد النسخة
الآن سأنتقل إلى الدالة construct__
تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية
البرمجة ستكون متاحة للتحميل حال إعتماد النسخة
مشكووور أخي على جهدك ولقد زدت تعميق مفهومها عندي.
''اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل بلية''
'اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء منهم و الأموات'
www.it-scoop.com
هذا الموضوع مغلق.