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

كيفية عمل Array List في ال PHP

مغلق
بدأه Dr.Pain في 6 أغسطس 2006 · 3 رد · 1,065 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته ........

هذا مثال يوضح كيفية عمل ArrayList او Collection مثل التي موجودة في الدوت نت :lol: :lol:

طبعا الفئة بدائية جدا وتحتاج الى الكثير من التطوير ولكنها تعتبر بداية جيدة لمن اراد خوض المجال :P :P

<?php

$a = new ArrayList;



$a->Add('Nokia3310','am 3310');
$a->Add('Nokia3000','am 3000');
$a->Add('Nokia3333','am 3333');

echo $a->Item('Nokia3333');



class ArrayList{

private $ar; 

function ArrayList(){
		//empty Constructor
}

function Count(){
		return sizeof($this->ar);
}

function Add($key,$obj){

		$this->ar[$key] = $obj;
}

function Remove($key){
			if(isset($this->ar[$key])){
					unset($this->ar[$key]);	
		}
}

function Item($key){

		if(isset($this->ar[$key])){
					return $this->ar[$key];			
		}

		else{
			return null;
		}


}
};

?>

اخوكم Dr.Pain

#2

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

طبعاً كلنا نعرف عذرك وهو أنها بدائية وكذلك كل البدايات تكون بدائية.

سأسألك سؤالين ليسا للنتقيص من شأنك وإنما لتنبه الأخوة على الوضع الأنسب لاستخدام البرمجة الكائنية

س1/ ما هو الأسهل في الاستخدام ؟؟ هل استخدام المصفوفة كما هي أم استخدام هذا الكائن ؟؟

س2/ ما هو الأسرع ؟؟

count($ar);
// or $a->count();

echo $ar['key'];
// or echo $a->Item('key');


$ar['Nokia3333'] = 'am 3333';
// or $a->Add('Nokia3333','am 3333');

من الملاحظات على المبرمجين المبتدئين - وأنا حتماً منهم - أنهم يستخدمون Class ويجعلونه مستودع للبيانات ، وهذا طبعاً ليس عيباً ولكن العيب هو الاقتصار على ذلك وعدم إضافة methods يعني دوال وإجراءات تغلف العملية وتجعل التعامل أسهل .

التطوير على مثل هذا الكائن سيكون خاصاً بالمبرمج وحاجاته في برامجة وليس تطوير كائن عام بـ array مجدي فائدة كبيرة !!!!! لماذا ؟؟؟؟؟؟؟؟

1- لأن المصفوفة أمر مجرد لا يعطي فائدة إلا أن يكون مخزناً للبيانات !! .

2- لأن php تأتي بدوال كثيرة جداً وسهلة الاستخدام خصوصاً المتعلقة بـالمصفوفات .

طبعاً هنا اعترااضات على كلامي ولكني أحبب التنبيه ، والتنويه

تم تعديل هذه المشاركة بواسطة أبو محمد اللحياني في 7 أغسطس 2006 في 00:47

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#3

السلام عليكم ورحمة الله وبركاته ........

اقتباس
س1/ ما هو الأسهل في الاستخدام ؟؟ هل استخدام المصفوفة كما هي أم استخدام هذا الكائن ؟؟

س2/ ما هو الأسرع ؟؟

ان اردت وجهة نظري في الموضوع فان الاسهل هو استخدام المصفوفة مباشرة وكذلك سوف تكون هي الاسرع

ولكن ان اخذنا الموضوع من وجهة نظر OO Programming فاعتقد ان تغليف الكود بواسطة

الفئات امر فعال ورائع جداااااااااااااااااااااا لماذا يا ترى ؟؟؟

للاجابة على السؤال السابق دعنا نستعرض عدد من النقاط والتي تحكي قصة شخصا ما :

1 - في يوم ما قرر احدهم ان يقوم بتصميم موقع ما , ولكن كانت هناك ميزة غريبة في هذا الشخص الا وهي

انه مولع باستخدام المصفوفات .

2 - هذا الشخص يقوم باستخدام الدالة sizeof لارجاع عدد عناصر المصفوفة .

3 - قام هذا الشخص باستخدام الدالة sizeof في حوالى 10000 الف موضع في البرنامج

( اقول تخيل ) .

4 - بالصدفة البحثة وجد هذا الشخص ان الدالة sizeof ماهي الا تغليف للدالة الاصلية والتي تسمى

count والتي هي بالطبع اسرع من الدالة sizeof .

5 - الان وقع ذلك الشخص في حيرة بين امرين هل يقوم باستبدال الدالة sizeof بالدالة count

وذلك كي يزيد من قوة الكود او ان يدع الكود كما هو لان عملية الاستبدال ستكون مرهقة جدا .

اذا اردت من ال OO programming اخراج ذلك الشخص من حيرته فانها ستقول له دع الحزن

عنك وقم بتغليف الكود الخاص بك داخل فئة .

ولتبيان ذلك بشكل اوضح تخيل معي اننا نستخدم الفئة التي قمت انا بكتابتها والتي تسمى ArrayList

وبالنظر الى التابع العضو المسمى Count لوجدناه يستخدم الدالة sizeof لارجاع عدد العناصر

الموجودة في ال List الخاصة بنا .

الان تخيل انه تم استدعاء التابع العضو المسمى Count حوالى عشرين مليون مرة .

الان و فجاءةً اكتشفت ان استخدام الدالة sizeof ليس مجديا وبطئ نسبيا لذا فانني قررت استخدام

الدالة count عوضاً عنها فهل تعتقد انني سوف اذهب الى الكود واقوم بعمل تغيير يقدر بعشرين مليون

تغيير ؟؟؟؟؟؟؟؟؟؟؟؟؟؟

الاجابة قطعا لا !!!!

حيث انني وبكل بساطة سوف اذهب الى الفئة المسماة ArrayList وسوف اقوم بتغيير صيغة التابع

العضو Count فبدلا من ان كان يستخدم الدالة sizeof سوف اجعله يستخدم الدالة count

هكذا وبكل بساطة حيث ان التابع العضو Count ليس الا Interface بين الفئة ومستخدم الفئة

وهنا تكمن القوة وهي اخفاء جميع التفاصيل الخاصة بالفئة عن المستخدم بحيث لو تغير التنفيذ الخاص باحد

اعضاء بالفئة فانه لا يؤثر على تناغم سير البرنامج .

اقتباس
من الملاحظات على المبرمجين المبتدئين - وأنا حتماً منهم - أنهم يستخدمون Class ويجعلونه مستودع

للبيانات ، وهذا طبعاً ليس عيباً ولكن العيب هو الاقتصار على ذلك وعدم إضافة methods يعني

دوال وإجراءات تغلف العملية وتجعل التعامل أسهل .

كلام راااااااااااااااااااااااااااااااااااااااااااااااااااااااائع جدا حيث انه وجب علينا دراسة الموضوع بشكل اكبر واخذ الموضوع

بجدية تامة .

فالكثير منا مقصرا في العلم المسمى Data Structure وكذا ال Design pattern

وال UML Language وانا واحد منهم ولكنني تنبهة لهذا للموضوع في الفترة الاخيرة والله يعيين

ونقدر نفهم ولو حاجة بسيطة من تلك العلوم ان شاء الله عز وجل .

تلك كانت وجهة نظري وياليت يضع بقية الاخوة ارائهم هنا حتى تعم الفائدة .

وفي الاخير لا يسعني الا ان اقول تشكر اخي أبو محمد على المداخلة .........

اخوكم Dr.Pain

#4

أنا مع الأخ ابو محمد في كل ماقال :

اخي الفاضل : Dr.Pain

اولا احب ان احيك لفكرتك . وهي عضيمة باستخدام الـ OOP .

ولكن اضيف ايضا ان هناك عامل مهم جدا في الـ OOP وهوا عامل السرعة . فبناء الـ Classes يجب ان يكون ذو فائدة في الإستخدام . وفي نفس الوقت في السرعة .

وهذا لا يعني ان اعيب على فكرتك لا بالطبع . فنحن جميعا لا زلنا نتعلم .

افضل دائما ان اسأل نفسي عندما اقوم ببناء Classes معينة هل هذا اسرع من ان استخدم كذا وهل هذا افضل لي في التعديل . كما تفضلت انت وشرحت عن استخدام وتكرار اكود او الدالة السمتخدمة sizeof .

هناك فئات (Calsses) استفيد من الطريقة التي يتم بها تركيب الـ Classes ايضا الأشياء التي بالفعل تتطلب منى ان اقوم ببناء Class لها .

عن طريق ما اراه في المنتديات . أيضا في الـ Script فمن حسن الحض انها مفتوحة المصدر . كي نستفيد من تجارب الأخرين .

تحياتي ;)

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

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