سوالات در مورد ايجاد class در php

NabiKAZ

Well-Known Member
سلام
بايد ببخشيد بابت موضوعات كوچيك يه موضوع جديد ايجاد ميكنم. اگر پيشنهاد بهتري براي ارايه سوالاتم سراغ داريد بگيد.

من خيلي وقته با php برنامه مينويسم و هيچ مشكلي از لحاظ پياده سازي ندارم و تا حالا نشده بخوام كاري كنم و لزوماْ نياز پيدا كنم كه از كلاس ها استفاده كنم و هميشه بدون كلاس ها مشكلم رو رفع كردم . تا اينكه زد به سرم كه حداقل كار كردن باشون رو ياد بگيم هر چند به كارم نيان .

اين مقدمه اين تاپيك بود. به عنوان اولين سوال:

يه فانكشن رو ميشه اينجوري استفاده كرد:
PHP:
$user = new profile;
$user->profile();
حالا چطور ميشه يه متغيير رو از تو كلاس بيرون كشيد و تو بدنه اصلي برنامه ازش استفاده كرد.
بازم ميگم ميدونم سادست ولي من تازه از صفر شروع كردم .

ممنون
نبي
 
آخرین ویرایش:

BeHnAm_akb

Active Member
آقا نبی سلام

یه جورایی منم تا چند وقت پیش به ابن مرحله رسیدم و یه دفعه نیاز کردم تو PHP به OOP نیاز دارم
از ائنجایی که دوست ندارم مثل من خیلی تلو تلو بخوری پیشنهاد می کنم اینجا ها رو ببینی البته شما استاد مایی:

http://www.webhostingtalk.com/showthread.php?s=&threadid=411521

http://www.iranphp.net/modules/newbb/viewtopic.php?topic_id=1079&forum=2&jump=1
 

Majid

مدیر سایت
عضو کادر مدیریت
لطفا کد خودتون رو در تگ [ php ] قرار بدین....

مجید
 

NabiKAZ

Well-Known Member
سلام

بهنام خان از پاسختون ممنونم .
لينكهايي كه دادي رو سر فرصت مطالعه ميكنم.
راستش من تموم مقاله ها در مورد class و oop تو iranphp.net رو چندين بار خوندم ، اما همون طور كه در ابتداي يكي از مقاله ها اومده درك ضرورت استفاده از كلاس ها كمي مشكله . و ضعف منم همينه . يعني هنوز درست نميدونم كجا لازمه از كلاس استفاده كنم . درست مثل 8 سال پيش كه اون موقع برنامه هام رو با if و goto هاي خيلي زياد مينوشتم و با function ها اشنا نبودم . اون موقع هم خيلي سعي كردم تا ضرورت استفاده از function ها رو تونستم درك كنم و بفهمم كجا كارم باهاشون راحت تر راه ميافته.


در مورد سوالي كه بالا مطرح كردم هم ، خودم جوابش رو پيدا كردم ! من نبايد از $ ابتداي متغيير استفاده ميكردم .
يعني اينجوري ميشه متغيير رو كشيد بيرون:
PHP:
$user->id
ببخشيد بيش از حد مقدماتي بود.


آقا مجيد ، از شما هم ممنون كه تذكر داديد ولي خوب اديتورتون زياد قوي نيست و منم iq نميرسيد كد رو دستي بنويسم ... الان كه درست شد ;)

تشکر از همه
نبی
 

zfarhad2003

Member
خوب معمولا در برنامه‌نويسي Php ضرورتي نداره كه شما از كلاسها استفاده كنيد و اين كاملا برمي‌گرده به سليقه برنامه‌نويس كه بخواد چه جوري كد نويسي كنه. (به صورت Oop يا ساخت يافته)
اما مزيت استفاده از كلاسها در اينه كه ‍:
1- كد شما رو خواناتر مي‌كنه و فهم كد به مراتب راحت تر مي‌شه.
2- استفاده مجدد از كد نوشته شده خيلي آسانتر و بهتر خواهد بود (البته اين دو مورد به خود برنامه‌نويس هم ربط داره)
3- مي‌تونيد از قابليتهايي كه كلاسها در اختيار شما قرار مي‌دند استفاده كنيد كه اين قابليت‌ها توانايي زيادي به نوشتن كدهاي بهينه‌تر به شما مي‌دن (مثل استفاده از ارث‌بري , پلي موفيسم و غيره)
4- اگر كسي بتونه از كلاسها به نحو احسن استفاده كنه ميزان كدنويسي تقريبا تا 50 % كاهسته مي‌شه يعني به جاي 1000 سطر 500 سطر برنامه مي‌نويسي
5- اگه از كلاسها بتوني درست استفاده كني حتي مي‌تونن به اسكريپت‌هاي شما امنيت خاصي رو هم ببخشن.

حالا فعلا اينا رو داشته باشين تا بعد
 

BeHnAm_akb

Active Member
من این رو تجربه کردم که در برنامه های بزرگ نمی شه بدونه OOP کار کرد.
من هم هنوز با منظق OOP درگیرم اما وقتی کدی با OOP نوشته میشه خیلی لذت بخشه
به قول یکی از بچه های ایران php اولش هیچی از oop نمی دونیم بعد که باهاش آشنا شدیم همه چیزو با oop می نویسیم ( یه جورایی طالبان برنامه نویسی می شیم! ) بعدشم تازه یاد میگیریم کجا به درد می خوره .


اما خوب در کل oop در php 5 خیلی بهتر شده و در اصل اصلا در php 5 به وجود اومده.
 

BeHnAm_akb

Active Member
oop همون Object Oriented Programming هست به عبارت دیگه برنامه نویسی شی گرا که یک نوع روش برنامه نویسی ساختار سافته است.
 

zfarhad2003

Member
همونطور كه دوست عزيزمون گفت oop يعني برنامه‌نويسي شي‌گرايي كه شما به هرچيزي در برنامه به شكل يك شي جداگانه كه خصوصيات جداگانه‌اي دارد نگاه مي‌كنيد و بعد همه اشيا برنامه رو تعيين كرده و جداگانه برنامه‌نويسي مي‌كنيد بعد كه رسيديم آخر كار همه اين اشيا را در كنار هم قرار مي‌ديم تا با يكديگر ارتباط برقرار كرده و در واقع اصل برنامه رو درست كنن.
 

NabiKAZ

Well-Known Member
سلامي دوباره
ار دوستاني كه محبت كردند و در بحث شركت كردند ممنونم . استفاده ميكنيم ار صحبتاشون.

پس نتيجه اينكه همه موافقن كه درك چگونگي و پياده سازي الگوريتم برنامه بوسيله oop و class ميتونه مهم باشه . بعد از اون ديگه همه چيز ساده ميشه. در واقع استارت كار مهمه و پي بردن به ضرورت لزوم استفاده از oop و يا استفاده نكردن از اون .

براي اينكه مسئله براي من و بعضي دوستان تازه وارد جا بيافته . فكر كنم نياز به چند مثال كاربردي و عملي داريم . براي مثال پروژه اي كه خودم در گيرش هستم رو مطرح ميكنم كه هم كار خودم راه بيافته و هم ضمن اون تجريه كسب كنيم .

ببينيد ساده خدممتون عرض كنم !
يك كاربر كه وارد سايت ميشه ، ميتونه در سايت عضو بشه . آيتم ها و فيلدهايي كه بايد پر كنه خيلي زياد هستند. (حداقل 30 فيلد) پس بايد يه جدول به اسم users داشته باشيم كه 30 تا فيلد داره . تا اينجا كاربر عضو ميشه و اطلاعات تو ديتابيس ذخيره ميشن و مشكلي نيست .
طرف دوم مدير سايته كه بايد كاربران عضو شده رو دسته بندي كنه و گروه كاربري رو مشخص كنه . يعني مشخص كنه كه كاربري كه مشخصات رو پر كرده بايد جزو گروه A يا B يا... قرار بگيره . كه اين كار هم با ست كردن فيلد user_mod از جدول users صورت ميگيره . و مشكلي نداره .
حالت بعد زمانيه كه كاربر به سايت لوگين ميشه . كاربر بعد از لوگين شدن به سايت بر حسب نوع گروهي كه براش مشخص شده ، يعني عضو گروه A يا B يا هر چي كه هست . بايد يه سري امكانات پيش روش ظاهر بشه .
ضرورت استفاده از class ها شايد اونجايي پيدا بشه كه نياز باشه هر لحظه و در هر صفحه سايت به اطلاعات كاربري كه لوگين كرده دسترسي پيدا كرد. مثلا در يه صفحه خاص تصميم ميگيريم كه جنسيت كاربري كه لوگين كرده رو تشخيص بديم . راهي كه به نظر ميرسه اينه كه نام كاربر كه قبلا در يك كوكي ذخيره شده رو بكشيم بيرون و توي ديتابيس جستجوش كنيم و فيلد جنسيت رو استخراج و استفاده كنيم . حالا تصور كنيد در هر لحظه بخواهيم يه مشخصه خاص از كاربر رو بدونيم ! (توجه كنيد كه براي هر كاربر 30 فيلد وجود داشت يعني 30 مشخصه!) و هر بار دسترسي به هر فيلد كاري وقت گيره . البته شايد بگيد هر بار سطر مربوط به اون يوزر رو ميخونيم و براي هر فيلد نيازي نيست كه در ديتابيس يك جستجو انجام بديم ، ولي چيزي كه مسلمه اينه كه فيلدهاي خونده شده از ديتا بيس رو بايد تو متغيير هاي مجزا بريزيم . و از اون متغيير ها استفاده كنيم كه اين كار هم كمي وقت گيره و هم اینکه تعداد متغییرها در برنامه زیاد میشن . تازه اگر بجای یک کاربر، اطلاعات چندین کاربر رو بخوایم استخراج کنیم کار پیچیده تر میشه.
راهي كه به نظر من ميرسه استفاده از يه كلاس با نام profile است!

تا اينجا هر چي گفتم صورت مسئله بود. اما از اينجا كه تشريخ class هست ممكنه اشتباه باشه، پس نيازه كه دوستان نظر بدن.
من اينطور تصور كردم كه اگر يه كلاس به نام profile داشته باشيم . كه در اون به ازاي تمام فيدهاي كاربر (30 فيلد) يه متغيير وجود داشته باشه . حالا اگر يه شيء به اسم user از نوع كلاس profile ايجاد كنيم. در واقع اون 30 متغيير(فيلد) اجزاء كلاس محسوب ميشن . و شيء user كه ما تعريف كرديم در واقع 30 تا جزء به خودش ميگيره ! و هر لحظه ميتونيم به اجزاء (فيدها) ي شيء (user يا كاربر) دسترسي پيدا كنيم .
اين كلاسي كه تشريح كردم شايد مفيد به نظر بياد يا شايدم كار بيهوده اي به نظر بياد. و يا در كل ؛ پروژه اي كه در بالا توضيح دادم به كلاس هاي مفيد ديگه نياز داشته باشه . كه چون من در اين مورد تجربه ندارم نيازمند راهنمايي شما دوستان هستم .

باتشكر
نبي
 
آخرین ویرایش:

zfarhad2003

Member
خوب اونجوري كه من از مسئله شما برداشت كردم شما احتياج يه چند تا شي داري كه من توضيح كلي درباره‌شون مي‌دم و خودت بايد بري يكم تحقيق كني تا به جايي برسي (به قول معروف نابرده رنج گنج ميسر نمي‌شود)
خوب اولا به يه كلاس مبنا نياز داريم مثلا user كه به قول شما داراي 30 فيلد مشخصه است كه در تمامي كاربران چه گروه A و چه گروه B يكسان است. حال بعد از طراحي اين كلاس با جزئيات كامل بايد يك كلاس به اسم userA داشته باشيم كه مخصوص كاربران گروه A است و از كلاس قبلي يعني user ارث خواهد برد. حال مي‌تونيم به اين كلاس خصوصيات مخصوص خودش رو بديم كه فقط مختص كاربران گروه A است و به همين ترتيب براي گروه B هم كلاس userB رو تعريف مي‌كنيم. خوب فكر كنم تا اينجاش واضح بود.
حال بايد براساس منطق برنامه خودتون از اين كلاسها استفاده كنين به نظر مي‌رسه كه در اينجا معقولانه‌ترين روش استفاده از پولي‌موفيسم است كه شما مي تونيد با درست كردن يه متغير از كلاس مبنا به راحتي در برنامه از كلاسهاي مشتق شده استفاده كنين. خوب البته اگه بخواين خيلي كارتون تميزتر دربياد اول بايد بشينين و برروي كاغذ ارتباط بين كلاسها و كلا برنامه‌تون رو دقيق رسم كنين مثلا چه چيزهايي بين اينا ردوبدل مي‌شه هركدوم چه خصوصياتي دارن و بعد پيادا سازي‌شون كنيد.
 

NabiKAZ

Well-Known Member
سلام
ممنونم توضیحت کاملی بود . استفاده کردم .
برم دنبالش ... ارث بری ... پولي‌موفيسم!!! .... برم سرچ کنم مقاله چیزی پیدا کنم ببینم داستان اینا چیه ....

باز بر میگردم
فعلا
 

NabiKAZ

Well-Known Member

میدونم این تاپیک قدیمی بود ، ولی چون موضوعش با موضوع بحثم یکی بود تاپیک جدید ایجاد نکردم...
(البته متن رو برای جای دیگه نوشته بودم و اینجا زدم که راهنمایی کنید. به همین خاطر با پست اول تاپیک مشابه هست.)


سلام ،
من تو درک استفاده از class ها خيلي مشکل دارم، و طبيعتاً توي طرز استفادشون هم مشکل دارم.
ولي دوست دارم لزوم استفادشون رو درک کنم و بتونم ازشون استفاده کنم. چون ميدونم حداقل خاصيتشون جلوگيري از تکرار کد نويسي در پروژها هاي مختلف است، يعني به راحتي ميشه اونها رو در هر پروژه اي بدون تغيير در اونها استفاده کرد. فکر ميکنم روي سرعت بارگزاري صفحات هم بي تاثير نباشه.
با يه سوال ساده شروع ميکنم ،
اين کد رو ببينيد:
PHP:
$member = new MemberLogin();
$member_info = $member->checkLogin();
اگر درست متوجه شده باشم با اين کد ميشه اطلاعات کاربر رو توسط تابع checkLogin که متعلق به کلاس MemberLogin است برگردوند و در متغيير member_info قرار داد و استفاده کرد.
سوال اينجاست که چه لزومي در استفاده از کلاس وجود دارد؟ آيا نميشه تابع checkLogin به همراه ديگر توابع برنامه رو در يه فايل مجزا قرار داد و اون فايل رو به بدنه اصلي برنامه include کرد. و از توابع استفاده کرد.
آيا در اين مثال استفاده از کلاس بالا مزيت و دليل خاصي داره ؟!

پ.ن: سعي کردم به کمک مثال مزاياي کلاس ها رو براي خودم جا بندازم.

باتشکر
نبي
 

Ali_Farhadi

Member
سلام
فلسفه استفاده از کلاس و به طور کلی برنامه نویسی شی گرا encapsulation کردن کدها ، افزایش reusability و customizability و در نهایت سهولت در تحلیل و فهم برنامه ها و جلوگیری از بروز خطاهای ناخواسته و ... می باشد.

قابلیت های برنامه نویسی شی گرا تو php زیاد ملموس نیست. حداقل بهتره برای شروع مفاهیم شی گرا رو توی زبان هایی نظیر delphi و vb یاد بگیرید.
 

wayiran

New Member
مي خواستم طرز استفاده از كلاس ها رو تو php ياد بگيرم.... واسه همين تو انجمن سرچ كردم اين تاپيك قديمي رو پيدا كردم.... ولي هيچ جاش استفاده از class رو ياد نداده... اگه ميشه با يه مثال توضيح بدين.
 

NabiKAZ

Well-Known Member
wayiran گفت:
مي خواستم طرز استفاده از كلاس ها رو تو php ياد بگيرم.... واسه همين تو انجمن سرچ كردم اين تاپيك قديمي رو پيدا كردم.... ولي هيچ جاش استفاده از class رو ياد نداده... اگه ميشه با يه مثال توضيح بدين.
سلام ،

شیی گرایی در PHP :
http://66.36.230.69/~iranphp/modules/sections/index.php?op=viewarticle&artid=36 (یک صفحه)
کلاسها در PHP چهار:
http://66.36.230.69/~iranphp/modules/sections/index.php?op=viewarticle&artid=8 (سه صفحه)

این دو مقاله بسیار مفید هستند.

نبی
 
آخرین ویرایش:

NabiKAZ

Well-Known Member
هادی ابراهیمی گفت:
آقا نبی این لینک کار نمیکنند میشه تست کنی.

سلام
مشکل از سرور هست گاهی کار میکنه گاهی نه
من الان زدم باز شد.
شما بازم سعی کن
اگر موفق نشدی
میگردم فایلها رو براتون لود میکنم.

نبی
 

جدیدترین ارسال ها

بالا