شكرا لك أخي عبد الله عيد
بارك الله فيك
شكرا لك أخي عبد الله عيد
بارك الله فيك
__________________
مدونتي .. دروس (PHP, JavaScript, C, Java)
برمجة وتطوير المواقع والمنتديات
الف الف الف شكرا لك ااستاااذي عبدالله عيد
شرح راااائع ومفصل
حفظت الصفحات عندي
وانتظر المزيييد
تحيااااتي
__________________
سبحان الله والحمد لله ولا اله الا الله والله اكبر
افضل [ بيج رانك 4 ] <<< كان سابقا .. الحين 2 :(
Up
حرام الموضوع ينزل تحت حتى لو كان ما اكتمل لكن هو مهم ..
وان شاء الله يكمل الباقي الاخ عبدالله ...
__________________
أرجوا من الجميع ان يسامحوني ، سواء عرفوني أو لم يعرفوني !! ، ارجوا من جميع من قد اكون اسأت اليهم أن يصفحوا عني ، ومن لديهم عندي حقوق أن يطلبوها مني .. جمعنا الله في الجنان .
أتقدم بالأسف على التأخير ولكن هي أشياء خارجة عن الإرادة ...
على العموم سأتابع بإذن الله تعالى ...
تحياتي
__________________
قال صلى الله عليه وسلم (كلمتان خفيفتان على اللسان ثقيلتان في الميزان (سبحان الله وبحمده ** سبحان الله العظيم) اوكما قال صلى الله عليه وسلم . (فهل هذه الكلمتان ثقيلتان على لسانك كي لا تقولها مرة واحدة في اليوم على الأقل)
الجزء الثاني : المتغير الداخلي this
كما ذكرنا في السابق أن الكلاس هو شرح للكائنات التي سيتم إنتاجها وإلى هنا وصلنا إلى كلام سليم جداً ...
حسناً .. عندما تقوم أنت بشرح كلاس معين فإنك كما ذكرنا مسبقاً أنك ستقوم بإنشاء متغيرات ودوال كلام سليم ياغالي ..!
طيب السؤال هنا ماذا لوكتبنا دالة خارج الكلاس أي ليس لها علاقة بالكلاس (دالة عادية) بإسم abdulah وبعدما أنتهينا من الدالة قمنا بكتابة كلاس جديد تحت هذه الدالة بإسم مثلاً Swalif وكان كلاس سوالف يحتوي على متغير بإسم مثلاً abc ودالتين بإسم nice و abdulah .
ماذا ستلاحظ من هذا الكلام ... !!!؟
أن الملف الذي نكتب فيه يحتوي على دالتين بإسم عبدالله .!!
الأولى داخل الكلاس
والثانية خارج الكلاس أي دالة عادية
والسؤال الأساسي هنا : ماذا لو أردنا عند كتابتنا لدالة nice أن نستدعي الدالة abdulah عندها سيكون الكود كالتالي :
الآن نتابع السؤال : فلاحظ أن nice تستدعي الدالة abdulah لذلك أي واحدة سيتم تنفيذها هل التي بداخل الكلاس أم التي بخارج الكلاس ؟كود PHP:
function abdulah()
{
echo "Hi, Swalif";
}
//-------------------------
class Swalif
{
var abc;
function abdulah()
{
echo "Hi, Object";
}
function nice()
{
abdulah();
}
}
لمن لديهم خبرة في مجال الـ OOP فإنه سيعرف الجواب ..
ولكي أريحكم فإنه سيتم تنفيذ الدالة التي بخارج الكلاس وليست التي بداخل الكلاس
إذاً ماهو الحل في حال أردت أنا أن أقوم بإستدعاء الدالة التي بداخل الكلاس وليست التي بالخارج ؟
الجواب هو : إستخدام المتغير this
ولكن ماهو المتغير this ?
بإختصار فإنه كما ذكرنا أن الكلاس يحتوي على مجموعة من الدوال والمتغيرات (صحيح)
إذاً فوظيفة المتغير this ستمكنك من الوصول إلى هذه الدوال والمتغيرات الخاصة بالكلاس الذي تقوم أنت بشرحه(وأنت داخل الكلاس فقط أي لايمكنك إستخدام المتغير this خارج شرح الكلاس وهذه النقطة مهمه فإنتبه لها )لذلك إذا أردنا أن نعيد المثال الأعلى لكي تقوم الدالة nice بإستدعاء الدالة abdulah التي بداخل الكلاس فإني سأعيد مافي الأعلى ليكون كالتالي (ولاحظ الدالة nice )
أي بإختصار كما تشاهد فإن المتغير this يشير إلى الكلاس نفسه وهو بكلام أخر عبارة عن object أو كائن من نفس النوع الذي تقوم أنت بإنشائه وكما ترى في الدالة nice فإن المتغير this يقول بكلام عربي (أحضر الدالة abdulah الموجودة في نفس الكلاس الحالي )كود PHP:
function abdulah()
{
echo "Hi, Swalif";
}
//-------------------------
class Swalif
{
var abc;
function abdulah()
{
echo "Hi, Object";
}
function nice()
{
$this->abdulah();
}
}
والآن ماذا إذا أردنا أن نستخدم المتغير abc داخل الدوال ؟
ينطبق على المتغيرات نفس الكلام أي يتم إستخدام المتغير this للوصول إليها مع ملاحظة أنه لايتم وضع علام $ للمتغير الذي يأتي بعد this .
أي إذا أردنا أن تقوم الدالة abdulah بإعطاء القيمة 7 للمتغير abc
وتقوم الدالة nice بطباعة قيمة المتغير abc فلاحظ كيف يتم إستخدام المتغير abc من خلال دوال الكلاس كالتالي :
وكما تلاحظ فإنه استدعى المتغير بدون علامة $كود PHP:
class Swalif
{
var abc;
function abdulah()
{
$this->abc = 7; //تعيين القيمة 7 للمتغير
}
function nice()
{
echo $this->abc;
}
}
وأرجوا أن تكون الفكرة من وراء استخدام المتغير this قد اتضحت بإذن الله تعالى ..
و للتذكير فإن this لايتم إستخدامه خارج تعريف الكلاس أي بكلام أخر لايمكن إستخدامه في خارج الكلاس ..
وهذا مالدي الآن فإن أخطأت فمن نفسي والشيطان وإن أصبت فمن الله عز وجل ..
وللبقية حوار بإذن الله تعالى ...
أخوكم عبدالله عيد
__________________
قال صلى الله عليه وسلم (كلمتان خفيفتان على اللسان ثقيلتان في الميزان (سبحان الله وبحمده ** سبحان الله العظيم) اوكما قال صلى الله عليه وسلم . (فهل هذه الكلمتان ثقيلتان على لسانك كي لا تقولها مرة واحدة في اليوم على الأقل)
مرحبا بعودتك الينا اخي
ما تصدق وش كثر استانست بعودتك
وفي انتظار اكمال الدروس -- بس تكفي لا تبطي علانا.
اهلا اهلا بعودتك يا عبدالله
ياخي ما تصدق وش كثر انا مستانس برجعوك للدرس تصدق احسبك ناسية
تكفى لا تطول الغيبة في تكملة الدرس منتظرينك بفارق الصبر
والله يقويك ويعطيك العافية
__________________
سبحان الله وبحمدة ، سبحان الله العظيم
The Constructor أو الباني المحمل الممهد ... !
بالنسبة لهذا الدرس فهو يتحدث عن Constructor و تترجمها الكتب العربية والمواقع العربية بكلمات كثيرة منها الباني . المحمل . الممهد . إلخ ...
لذلك أنا هنا لا أعرف بأي إسم أضعه ... لذلك سأقول المعنى على شكل تعريف ثم أذكر إسم معين لنسير عليه ..
مامعنى Constructor ?
بالنسبة للبرمجة فهي عبارة عن دالة تكون داخل الكلاس وتقوم هذه الدالة بإجراء عمليات التمهيد مثل أن تستخدم الدالة هذه لتمهيد قيم المتغيرات عند بدء التعامل مع الكلاس ... وهي أول دالة يتم إستخدامها عند إنشاء الكائن وهذا ثابت .
أما بالنسبة للسؤال هنا : هو إذا كان الـ Constructor دالة فكيف يتعرف الكلاس على دالة معينة ضمن الدوال الموجودة فيه ؟
يختلف الجواب من php4 و php5 !!
وأنا سأكتفي ببي اتش بي 4 ...!
تكون دالة Constructor بنفس إسم الكلاس بالضبط حتى في شكل الحروف أي إذا كانت الحروف مكتوبة في اسم الكلاس بالصغير والكبير فيجب أن يكون إسم الدالة مطابق بالضبط ...
ويازين التوضيح بمثال .. :app:
الآن تخيل أن لدينا كلاس بإسم Image أي صورة وفي هذا الكلاس ولنفرض متغيرين هما w يمثل عرض الصورة مثلاً ومتغير بإسم h ويمثل الإرتفاع للصورة و هذا الكلاس يحتوي على دالتين بإسم
Image ويمثل الـ Constructor الخاص بالكلاس Image ولاحظ هنا أن هذه الدالة بنفس إسم الكلاس وتستخدم لأي شئ تريد عمله فهي دالة عادية مثلهامثل أي دالة ويمكنك كتابة ماتريده فيها ولكن عرفت على أنها دالة لتمهيد المتغيرات الخاصة بالكلاس وإجراء العمليات التمهيدية ولكن هذه ليست قاعدة ثابتة .
Draw لرسم الصورة مثلاً
لذلك سنمهد المتغيرين h,w في الدالة Image وسيكون شكل الكلاس كالتالي :
كود PHP:
class Image
{
var $w;
var $h;
function Image()
{
$this->w = 0;
$this->h = 0;
}
function Draw()
{
// do something here
}
}
طيب الآن أنشأنا الكلاس هنا ..
الآن نريد إستخدام الكلاس Image ونريد أن ننشئ كائن بإسم pattern لذلك فإننا سنقوم بالتالي :
لاحظ الآن عندما أنشأت الكائن فإنك كتبت إسم الكلاس بعد كلمة new ...كود PHP:
$pattern = new Image();
في الحقيقة أنت كتبت إسم الكلاس نعم ولكن في حقيقة الأمر أنت تستدعي الدالة Image من ضمن الكلاس Image لذلك المتغير pattern ستكون قيمة h,w فيه هي 0 و 0 .
لذلك دائماً دالة الـ Constructor يتم إستدعائها عند إنشاء الكائن فقط ..
الآن لو أردنا أن نجعل المستخدم هو من يعين طول وعرض الصورة فإننا نستطيع وضع باراميترين للدالة Image عند التمهيد وسيصبح شكل الكلاس مع الدالة Image كالتالي :
ولاحظ أن المتغيرين h,w يتم تحديدهما بالمتغيرين a,b ...كود PHP:
class Image
{
var $w;
var $h;
function Image($a,$b)
{
$this->w = $a;
$this->h = $b;
}
function Draw()
{
// do something here
}
}
الآن إذا أردت أن تنشئ كائن بإسم pattern كما ذكرنا فإنك ستنشئ الكائن كالتالي :
كود PHP:
$pattern = new Image(72,120);
وأرجوا أن تكون الفكرة قد وصلت من وراء الـ Constructor .. وكان الله من وراء القصد .
والآن بعدما شرحت الأساسيات فالمطلوب هو أن يضع كل شخص ما يريده حول OOP فهناك مواضيع كثيرة جداً جداً حول هذا الموضوع وكل شخص يضع سؤاله حول هذا المفهوم كي يتم الإجابة عليه وشرحه وسأكون في الخدمه بإذن الله تعالى ...
وسنحاول أن نجعل الموضوع يزخر بالفائدة حول هذا المفهوم فأي تساؤلات أو مواضيع جديدة حول OOP ستكون هنا ...
وهذا مالدي الآن فإن أخطأت فمن نفسي والشيطان وإن أصبت فمن الله عز وجل ..
وللبقية حوار ... بإذن الله
أخوكم عبدالله عيد
__________________
قال صلى الله عليه وسلم (كلمتان خفيفتان على اللسان ثقيلتان في الميزان (سبحان الله وبحمده ** سبحان الله العظيم) اوكما قال صلى الله عليه وسلم . (فهل هذه الكلمتان ثقيلتان على لسانك كي لا تقولها مرة واحدة في اليوم على الأقل)
الله يجزاك الف الف خير ...
شكرا لك نتمنى أن تسرع فى شرحك الممتع والسهل الذى قربنا جدا من فهم وايستعاب الكائنات التى ومنذ تعلمنا للبى أتش بى نهملها ونخاف مت ان نقترب منها لخوفنا من فشلنا من فهمها
نشكرك على مساعدتنا فى هذا الموضووع
السلام عليكم ورحمة الله وبركاته ... تحية طيبة
لاشكر على واجب وهذا واجبنا ..
المطلوب الآن من الجميع طرح أسئلتهم حول الموضوع لكي يصبح هذا الموضوع ملئ بالشروحات والأسئلة المجاب عليها وهكذا أفضل يعني الرجاء طرح سؤال في مايخص OOP ..!
وكل مرة تتم الإجابة على سؤال معين حتى يصبح هذا الموضوع مرجع بإذن الله تعالى ,,,
وبعد ذلك عندما نجد أننا أكتفينا من الأسئلة عندها سنقوم بشرح الكلاسات والكائنات في php5 بإذن الله تعالى ...
تحياتي
أخوكم عبدالله عيد
__________________
قال صلى الله عليه وسلم (كلمتان خفيفتان على اللسان ثقيلتان في الميزان (سبحان الله وبحمده ** سبحان الله العظيم) اوكما قال صلى الله عليه وسلم . (فهل هذه الكلمتان ثقيلتان على لسانك كي لا تقولها مرة واحدة في اليوم على الأقل)
[] اشكر الاخ عبد الله على الشرح والاخوة الدين ساعدوا في الموضوع
وهنا اضع متال تطبيقي للدرس عبارة عن كلاس لحماية الصفحة بكلمة السر
كود PHP:
class password{
////////////////////////
var $name ;
var $username ;
var $password ;
var $message ;
///////////////////////////
function authenticate() {
Header( "WWW-authenticate: basic realm=\"$this->name\"");
Header( "HTTP/1.0 401 Unauthorized");
echo "<b><i>$this->message</i></b>";
exit;
}
///////////////////////////
function CheckPwd($user15,$pass15) {
return ($user15 != $this->username || $pass15 != $this->password) ? false : true;
}
///////////////////////////////
function pass(){
global $PHP_AUTH_USER,$PHP_AUTH_PW;
if(!isset($PHP_AUTH_USER)) {
$this->authenticate();
}elseif(!$this->CheckPwd($PHP_AUTH_USER,$PHP_AUTH_PW)) {
$this->authenticate();
}
///////////////////////////
}
}
ولاستغلال على هدا الشكل
كود PHP:
$ajekal =new password() ;
$ajekal->name ='Protected';
$ajekal->message ="You must enter a valid login ID and password!!!!!!";
$ajekal->username ='admin';
$ajekal->password ='123456789';
$ajekal->pass();
__________________
اينكم يا مغاربة ’’’؟؟؟
لنتعاون من اجل النهوظ بالمواقع المغربية
****************************
متى سنتوقف عن مواقع المسيقى والدردشة !!!!!
www.gsm4maroc.com
وفي المتال اعلاه لاحضت انه يمكن استغلال عمل الكلاس وجميع الكلاسات بواسطة وضع استغلال الكلاس داخل دالة جديد متل
يمكن اضافت هاته الدالة بجانب الكلاس بحيت يمكن ان نستغله بواسطة اتدعاء الادالةكود PHP:
function pass($name,$message,$username,$password){
$ajekal =new password() ;
$ajekal->name =$name;
$ajekal->message =$message;
$ajekal->username =$username;
$ajekal->password =$password;
$ajekal->pass(); }
وبهاته الطريقة نتصر طريقة استغلال الكلاس بحيت انه يجد نوع من التكرار في تعريف متغيرات الكلاس واستدعاء الكلاس كل مرةكود PHP:
pass('Protected','You must enter a valid login ID and password!!!!!!','admin','admin2');
الطريقة جربتها على
php5 :eek2:
ولم اراها في اي مكان وارجو من الاخوة المحترفين تصحيح الاخطاء ادا كانت واعطاء رايهم في هاته الطريق وهل فعلا من الجيد تحويل الكلاس الى دالة :deal:
انا من رايء انه جيد حيت انه يسهل استعمال الكلاس في عدة صفحات الى اخره
لا تنسو انى مبتدا ولا تاخدو علي ان اخطأت :con2: :con2:
__________________
اينكم يا مغاربة ’’’؟؟؟
لنتعاون من اجل النهوظ بالمواقع المغربية
****************************
متى سنتوقف عن مواقع المسيقى والدردشة !!!!!
www.gsm4maroc.com