الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

برمجة الكائنات - محاولة للنيل منها

مغلق
بدأه vivid في 27 ديسمبر 2007 · 11 رد · 900 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سوف أحاول هنا تقديم بعض ما استوعبته عن برمجة الكائنات PHP5

الرجاء تصحيحي في حالة ورود بعض الأخطاء.

ربما لا أوفق في توضيح بعض المسميات باللغة العربية

لأنني تعمقت في دراستها بالإنجليزية

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

لنبدأ الآن

تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية

Rufaa v1.0 Alpha 1

البرمجة ستكون متاحة للتحميل حال إعتماد النسخة

#2

أولا : برمجة الكائنات ظهرت بصورة مختصرة في PHP3 تم تطويرها بـ PHP4 و تم برمجة العديد من الموقع عليها مثل موقع زووبس الشهير. و لكن بنزول النسخة PHP5 أصبحت مطلب من جميع المبرمجين. و يتوقع حدوث ثورة برمجية عند النزول المتوقعة لـ PHP6

ثانياً : برمجة الكائنات ليست لديها علاقة بـ PHP بل مصدرها الأصلي هو C و JAVA لذا لو كان ليس لديك إلمام بـبرمجة PHP فلا تتوقع برمج سطر واحد. يعني أن برمجة الكائنات عبارة عن فكرة مطورة و سلسة لتنفيذ أفكارك البرمجية و لكنها ليست هي من صميم PHP البتة.

يتم عمل الكائنات عن طريق الكلاسات و بعض الدوال عن طريق الـ FUNCTIONS

و يتم كتابة هذه الكلاسات كما يلي :

class xxx {
//do some thing here
}

لاحظ أننا عند كتابتنا لـ class قمنا بإدراج اسم الكلاس

و ما بين القوسين سيتم إدراج أكواد الـ php

و سيبقى السؤال ما هي نوعية الأكواد التي سوف نقوم بإدراجها أو إنشاءها بين أواس الكلاس

تم تعديل هذه المشاركة بواسطة vivid في 27 ديسمبر 2007 في 11:12

تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية

Rufaa v1.0 Alpha 1

البرمجة ستكون متاحة للتحميل حال إعتماد النسخة

#3

قبل أن نعرف كيفية تنفيز أكواد php بين محتوى الكلاس

يجب معرفة كيفية استدعاء تلك الأكواد و إخراج نتيجة تلك الأكواد على أساس تعطينا الشيء الذي نريده في النهاية

و ذلك يتم عبر استخدام كائن يتم استخدامه من قبل المبرمج على شرط أن تتقدمه علامة الدولار

$obj = new xxx();
//بالأسف سوف يتم استدعاء الفنكشن و محتوياتها. سوف نعرف ذلك مستقبلا

لاحظ :

* لقد قمنا بكتابة الكائن تسبقه علامة الدولار.

* بعدها قمنا بإدراج عللامة =

* ثم التابع new وهو التابع الذي سوف نستخدمه دوماً في استدعاء الكلاسات.

* ثم اسم الكلاس مربوط بين قوسين.

* في النهاية يتوجب إدراج الفاصلة المنقوطة.

ليصبح شكل الكلاس النهائي

class xxx {
//do something here
}
$obj = new xxx();

تم تعديل هذه المشاركة بواسطة vivid في 27 ديسمبر 2007 في 11:24

تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية

Rufaa v1.0 Alpha 1

البرمجة ستكون متاحة للتحميل حال إعتماد النسخة

#4

نأتي هنا لمعرفة ما يخيف الجميع من اقتحام برمجة الكائنات

يجب التدقيق جيدا حتى نقوم بإستيعاب ذلك سوية

بعض الملاحظات :

* تحتاج لتنظيم أفكارك جيداً لأن ما تكتبه من خصائص ضمن محتوى الكلاس يجب أن يكون ذا صلة. يعني كلمة (ألوان) تتكون من أعداد لاحصر لها من الألوان مثل الأحم - الأخضر - إلخ إلخ إلخ. يعني رتب أفكارك و أجعل كل ما تريده له علاقة بين بعضه البعض.

* دعونا ننسى php4 لأنه قد تم تعطيلها رسميا من موقع php.net .

* بالنسبة لـ php4 فإنها تستعي خصائصها بالمتغير var

class xxx{
var $username
function BringUsername(){
// do something here

}
}
$obj = new xxx();

* سوف نقوم بإيقاف التعامل مع php4 و نسير في الركب مع php5

تم تعديل هذه المشاركة بواسطة vivid في 27 ديسمبر 2007 في 11:39

تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية

Rufaa v1.0 Alpha 1

البرمجة ستكون متاحة للتحميل حال إعتماد النسخة

#5

بـ php5 تم انشاء خصائص أخرى غير var المستخدم بـ php5

و هي :

public

protect

private

تسبق المتغيرات بدل var

class Registration{
public $username
public $password
public $email
private $id
protected $ip
}
$user = new Registration();

تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية

Rufaa v1.0 Alpha 1

البرمجة ستكون متاحة للتحميل حال إعتماد النسخة

#6

إلى الآن كلاساتنا عديمة الجدوى لأننا لم نعطيها قيم حقيقية و لكن هي محاولة منا لمعرفة كيفية التنسيق قبل الانتقال للمراحل المهمة.

كيفية استخدام public

عند استخدام public يتم استدعاء المتغير اللي بعديها من خارج الكلاس

عند استخدام protect يتم استدعاء المتغير اللي بعديها من داخل الكلاس

عند استخدام private يتم استدعاء المتغير اللي بعديها من خارج الكلاس

ملحوظة : ما هو الفرق بين protect و private ما دام ان الإثنين يتم استدعائهم من داخل الكلاس؟

الإجابة أن المتغير بعد protect يمكن استخدامه و توريثه في كلاسات أخرى و أيضا يكون داخل تلك الكلاسات و ليس خارجها. بينما private تنحصر استخداماتها في كلاس واحد فقط و لا يتم توريثها إلى أي كلاس آخر.

سوف نعرف مدى سهولة ذلك من خلال دخولنا في اللحم الحي

تم تعديل هذه المشاركة بواسطة vivid في 27 ديسمبر 2007 في 12:03

تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية

Rufaa v1.0 Alpha 1

البرمجة ستكون متاحة للتحميل حال إعتماد النسخة

#7

الآن سوف ندخل في اللحم الحي

و سوف نجني ثمار جهدنا

<?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 يجب أن يليه التابع -> ثم اسم الفنكشن مع يحتويه من متغير. مع استبدال اسم المتغير بالغيمة التي تريدها في حالة استدعت الضرورة ذلك

تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية

Rufaa v1.0 Alpha 1

البرمجة ستكون متاحة للتحميل حال إعتماد النسخة

#8

لاحظ في المثال الآخير أننا استخدمنا الأمر public أسفل الكلاس

كما استخدمناه بطريقة غير مباشرة أمام function

لأنك عند كتابتك لكلمة function دون تحديدلها مثل

function Username(){
//do something
}

فإن الاسكريبت سيترجمها كالآتي :

public function Username(){
//do something
}

لذلك استدعينا الكلاس و الفنكشن خرج الكلاس

تم تعديل هذه المشاركة بواسطة vivid في 27 ديسمبر 2007 في 19:47

تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية

Rufaa v1.0 Alpha 1

البرمجة ستكون متاحة للتحميل حال إعتماد النسخة

#9

الآن سوف نقوم استدعاء الكلاس من الداخل عن طريق الأمر 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

سوف أعود لذلك بشرح وافي

تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية

Rufaa v1.0 Alpha 1

البرمجة ستكون متاحة للتحميل حال إعتماد النسخة

#10

كما قد أوضحت لكم

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

تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية

Rufaa v1.0 Alpha 1

البرمجة ستكون متاحة للتحميل حال إعتماد النسخة

#11

الآن سأنتقل إلى الدالة construct__

تم إطلاق برمجتي ذات المصدر المفتوح بصورة رسمية

Rufaa v1.0 Alpha 1

البرمجة ستكون متاحة للتحميل حال إعتماد النسخة

#12

مشكووور أخي على جهدك ولقد زدت تعميق مفهومها عندي.

''‏اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما ‏نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل ‏بلية''

'‏اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء ‏منهم و الأموات'

www.it-scoop.com

هذا الموضوع مغلق.

مواضيع مشابهة