![]() |
|
|||||||
| ثبت نام | کتابخانه فایل ها | راهنما | لیست کاربران | کلوب های کاربران | همه قسمت ها ، به عنوان خوانده شده علامت گذاری شوند |
| PHP در این بخش میتوانید درباره مطالب مربوط به PHP بحث و گفتگو کنید. |
![]() |
|
|
ابزار های تاپیک | طریقه نمایش |
|
|
#1 |
|
کاربر دائمی
![]() |
آموزش برنامه نویسی OOP
سلام
از عنوان انتخاب شده معلوم هست که در مورد چی هست ولی من واسه اون دسته از کسانی که به تازگی وارد برنامه نویسی شند توضیح می دم : برنامه نویسی شی گرا (OOP مخفف Object Oriented Programming) شیوه ای از برنامه نویسی است که بیشتر بر روی شی کار میکند . هر شی دارای توابع و متغیر هایی می باشد که درون شی تعریف می شوند. در PHP ما با استفاده از Class اشیا مورد نظر خود را تعریف می کنیم . مثال : کد PHP:
کد PHP:
برای اینکه ما باید این شی را در برنامه به یک متغیر نسبت بدهیم . بدین صورت : کد PHP:
تا اونجا که من میدونم در PHP 4 یک کپی از این کلاس درون متغیر یا شی قرار می گیره .. اما در PHP 5 فقط یک دستگیره از کلاس به شی ارجا می شود. حالا نوبت به استفاده تابع درون کلاس می باشد. برای اینکه به توابع یا متغیر های درون Class دسترسی داشته باشیم باید از پس از نام متغیر از <- استفاده کنیم : کد PHP:
خیلی ساده بود نه ؟ حالا یکم سخت ترش می کنیم. به کلاسی که ساختیم یک متغیر اضافه می کنیم. بدین صورت : کد PHP:
کد PHP:
کد PHP:
جواب خیلی سادست .. همون طور که نام تابع رو صدا زدیم می تونیم بجای نام تابع نام متغیر رو بنویسیم و به متغیر درون کلاس دسترسی داشته باشیم. کد PHP:
بله .. توسط متغیر this$ می توانید به متغیر ها درون یک شی دسترسی داشته باشید و به آنها مقدار بدهید یا مقدار آنها را درون متغیر دیگری قرار دهید یا مقدار آن را مورد مقایسه قرار دهید. توی یک مثال ساده توسط this$ به متغیر myname$ مقداری می دهیم : کد PHP:
کد PHP:
کد PHP:
کد PHP:
کد PHP:
کد PHP:
کد PHP:
انشا الله اگر این جلسه مورد استقبال دوستان قرار گرفت در جلسه دوم به بحث در مورد : کد PHP:
اگر سوالی در این مورد داشتید بپرسید .. فقط سوالاتی که در همین مورد هستند رو مطرح کنید . موفق و پیروز باشید |
|
|
|
| 40 کاربر از hidensoft به خاطر این مطلب مفید تشکر کرده اند: | amirkh, ariahor, bigcowboy, binyaft, binyaz2003, Chabok, Cybersilent, Cyletech, delphi77, djtrex, ealvandi, farshad_persia, Folaani, horap30, hossein2kk, I,Nobody, iPouya, mahmood3d, majidmjh, mehdimdh, mohsened, mosi-online, oxygenws, Padrone, pesarkhobeee, rapid2share, saeed_hf52, sanbad, smhnaji, soheil.moradi, soltany, tabib_m, tajerman, tarhebartar, terrorhell, TheMohammad, میـلاد, yoshika, سار |
|
|
#2 |
|
کاربر دائمی
![]() |
ضمن تشکر از مطلب مفیدتون.
اجازه بدید چند مطلب کوچک هم بنده اضافه کنم. تعریف کلاس فقط یک الگو هست و وقتی با دستور new به یک متغییری نسبتش میدیم، یک نمونه از روی اون کلاس میسازه و در حافظه ذخیره میشه (درحالیکه تعریف کلاس فقط یک الگو هست که میتونه توی حافظه هم نباشه) و اون متغییر با اون کلاس مرتبط میشه. البته این مفهوم کلی هست و پیاده سازی میتونه خیلی پیچیده تر باشه بنا به بهینه سازی و غیره. مثلا اینکه هر نمونه از کلاس نیاد و کل ساختار و تعریف و تابعها رو بخواد درخودش حمل کنه و بجاش یک رفرنس به الگو داده بشه درموقع نیاز به اجرای تابع و غیره. بهرحال این تقریبا بدیهی هست که متغییرهای هر نمونه از کلاس (در اصطلاحات فنی شیء گرایی Instance یا نمونه گفته میشه) هرکدوم باید در مکان جداگانهء خودشون ذخیره شده باشن و غیره (همش و غیره شد!!). فقط خواستم بگم این تفکر که فکر کنیم اون تعریف کلاس چیزی فراتر از یک الگو هست و متغییرهای تعریف شده از اون کلاس چیزی ندارن جز یک مرجع منفرد، چندان درست بنظر نمیرسه. این رو مقایسه کنید با مفهوم استراکچر که از مدتها قبل از اختراع شیء گرایی، در بسیاری زبانهای برنامه نویسی وجود داشته. در اونجا هم ما یک تعریف داریم که بخودی خود چیزی موجود و قابل دستیابی نیست (احتمالا در کد کامپایل شدهء اجرایی هم اثری ازش باقی نمیمونه)، بلکه بعنوان الگویی برای ساخت و اختصاص حافظه برای متغییرهایی از اون نوع و دسترسی به محتویات اونها مورد استفاده قرار میگیره. بنظرم تفاوت عمدهء استراکچر با کلاس این هست که استراکچر فقط محتوی دیتا/متغییر هست و هیچ تابعی (در اشیاء متد گفته میشه) نداره. در پی اچ پی ۴ هم پیاده سازی شیء گرایی پایه ای نبوده (میشه گفت تاحدی شبیه سازی شده) و شاید موردی که ذکر کردید هم مربوط به همون میشه که موقعی که متغییرهای محتوی کلاس رو به هم نسبت میدیم در متغییر جدید یک کپی از کلاس ذخیره میشه. خب این روش حافظه و منابع بیشتری رو مصرف میکنه. بهرحال برنامه نویسی با شیء گرایی بسیار راحتتر و با مزایای زیادی هست. خصوصا برنامه نویسیهایی چنین سطح بالا مثل اپلیکیشن نویسی وب. پس بهتره از ابتدا به برنامه نویسی شیء گرا عادت کنیم. حتی کار اول آدم میتونه در این زمینه بسیار راحتتر و با کیفیت تر از چیزی باشه که بنظرش میرسه. پی اچ پی ۵ قابلیت شیء گرایی رو بصورت خیلی اساسی تر و اصولیتری پیاده کرده و تعدادی قابلیت پیشرفته و مفید بهش اضافه کرده و همچنین استانداردهاش رو اصولی تر کرده؛ بطور مثال همین توابع __construct و __destruct که مربوط به پی اچ پی ۵ هستن و در پی اچ پی ۴ شناسایی نمیشن، اما حداقل درمورد تابع __construct معادلش در پی اچ پی ۴ هم وجود داره که عبارت از تابعی با نام کلاس محتوی آن تابع هست. |
|
|
|
| 5 کاربر از Folaani به خاطر این مطلب مفید تشکر کرده اند: |
|
|
#3 |
|
کاربر دائمی
![]() |
سلام
امروز می خوایم در این موارد باهم صحبت کنیم کد PHP:
()construct__ تابعی که با این نام باشه هنگام ساختن یک شی از کلاس بطور خود کار اجرا میشه ()destruct__ تابعی که با این نام باشه هنگامی که شما عملیاتتون با شی تموم بشه بطور خود کار اانجام می شه ::self با این متد می تونید از داخل کلاس یک تابع از کلاس رو صدا بزنید ::parent این متد به کلاس والد اشاره می کنه .. زمانی که شما یک کلاس رو فرزند کلاس دیگری قرار بدید با یک مثال ساده کار رو شروع می کنیم. به کد زیر نگاه کنید کد PHP:
کد PHP:
حالا اگه این تابع construct__ چند تا آرگمان در ابتدا از ما بخواد باید چطوری این آرگمان ها رو مقدار دهی بکنیم ؟ حالا به کد زیر نگاه کنید کد PHP:
کد PHP:
وگر نه شما با خطایه کد:
Warning: Missing argument 1 for Myclass::__construct(), called in FILE ADRESS on line LINE NUMBER and defined in FILE ADRESS on line LINE NUMBER کد PHP:
(این قابلیت در php 5 هم support می شود) حالا به این کد نگاه کنید : کد PHP:
کد PHP:
کد PHP:
کد PHP:
حالا به این کد نگاه کنید : کد PHP:
همون طور که دید ما از داخل تابع Myclass تابع t_empty رو صدا زدیم. شما می تونید با استفاده از این متد به دیگر توابع دسترسی داشته باشید و آنها رو اجرا کنید. اما ::parent قبل از توضیح parent باید به شما یاد بدم که چطوری یک کلاس رو والد کلاس دیگری قرار بدیم . به این کد نگاه کنید : کد PHP:
و توسط متد ::parent تابع example کلاس مادر رو صدا زدیم . فکر نمی کنم مطلبی مونده باشه .. با آرزوی موفقیت برای شما |
|
|
|
| 24 کاربر از hidensoft به خاطر این مطلب مفید تشکر کرده اند: |
|
|
#4 |
|
کاربر دائمی
![]() |
پولی مورفیسم (برنامه نویسی سطح بالا)
سلام
من نمی دونم چرا به برنامه نویسی Oop اصلا احمیت داده نمی شه ! واسه پیدا کردن یک کار معمولی هم حداقل شما باید Oop بلد باشی .. بریم سر اصل مطلب امروز در رابطه با یکی از نکات قدرت Php می خوایم صحبت کنیم . پولی مورفیسم می شه گفت پیچیده ترین روش برنامه نویسی در مبحث oop بر می گرده به این بخش . با استفاده از این روش می توانید کنترل برنامه را افزایش داده و از تعریف چند آبجکت برای چند کلاس جلوگیری کرد . این مثال از صفحه 67 و 68 PHP 5 Power Programming هست . کد PHP:
عملکرد برنامه : دو کلاس یکی با نام Cat و دیگری با نام Dog وجود دارد . تابع printTheRightSound با استفاده از پولی مورفیسم به دنبال کلاس مورد نظر می گردد و تابع موجود در کلاس را صدا می زند . ولی یک اشکال در این روش وجود دارد .. اگر بخواهیم چند صدا از دیگر حیوانات اضافه کنیم باید بدنه Else If را گسترش بدهیم که این روش خوانایی برنامه را پایین می آورد .. راه حل جالبی برای این کار در PHP وجود دارد . آن هم استفاده از توارث است . این بار یک کلاس با نام Animal به برنامه اضافه می کنیم. به این کد با دقت نگاه کنید : کد PHP:
نیاز به توضیح خاصی نیست (اینجور که فکر می کنم). در صورت اینکه سوالی بود همینجا بپرسید (پیام خصوصی نفرستید ).
|
|
|
|
| 19 کاربر از hidensoft به خاطر این مطلب مفید تشکر کرده اند: |
|
|
#5 | |||
|
کاربر دائمی
![]() |
نقل قول:
نقل قول:
نقل قول:
|
|||
|
|
|
| 4 کاربر از hidensoft به خاطر این مطلب مفید تشکر کرده اند: |
|
|
#6 |
|
کاربر تازه وارد
![]() تاریخ عضویت: آبان 1383
پست: 67
تشکرها: 1
3 بار تشکر شده در یک پست
|
نحوه تدریس جالب هست
ساده ، روان و کار آمد من فکر می کنم دوستانی که دائم درباره مزایا سوال می کنند هنوز یک برنام بزرگ رو ننوشتند یا می شه گفت شاید هنوز متوجه نشدن که در صورتی که برنامه بزرگ بشه و قرار باشه یک نفر دیگه توی انجام کار وارد بشه یا انکه قرار باشه گروهی کد نویسی بشه بدون oo امکان نداره یا اینکه خیلی سخته البته از ابتدا OO نوشتن سخته به عبارتی باعث می شه فرد یادگیرنده کمی کیج بشه و شاید باعث دلسردی از کد نویسی پیدا بشه اون هم PHP که واقعا ساده و زیباست بخاطر همین توسعه من به دوستان تازه کار اینه که خودشون رو خیلی درگیر OO نکنن ولی یادشون باشه دیر یا زود باید به این سمت برن و اون زمان ، زمانی که فرد خودش متوجه میشه که داره کار سخت می شه درضمن آموزش رو ادامه بده ممنون
__________________
[مغزهای بزرگ در مورد ایده ها صحبت می کنند. مغزهای متوسط در مورد حوادث صحبت می کنند و مغزهای کوچک در مورد مردم |
|
|
|
|
|
#7 |
|
کاربر دائمی
![]() |
سلام
دوستانی که بحث رو دنبال کردند دیگه حالا آمدگی پروژه های خیلی بزرگ تر رو دارند. با یک تمپلت انجین کار رو شروع می کنیم. زنگ تفریح این موتور تمپلت خیلی سادست پس زیاد خوشحال نشید و فردا برید یه smrty برا خودتون بسازید و پس فردا هم یک PHP جدید ![]() ابتدا به کد مربوط به فایل کلاس اصلی نگاه کنید. کد PHP:
کد PHP:
کد PHP:
3 تا تابع اصلی داره این کلاس کد:
function assign($var_array) اول از همه چک می کنه که ورودی تابع یک آرایه باشه .. در غیر این صورت خطا صورت می گیره سپس متغیر جدید با متغیر های قبلی ادقام می شوند. در صورت وجود ابهام در مورد عملکرد array_merge به اینجا نگاهی بی اندازید. کد:
function parse($tpl_file) ابتدا بررسی می کنه که آیا فایلی که آدرس داده شده موجو هست یا خیر. در صورتی که وجود نداشته باشه خطا صادر می شه . در خط بعد توسط تابع file_get_contents تمامی اطلاعات موجود در فایل مورد نظر بصورت استرینگ به متغیر tpl_content$ داده می شود. در صورت وجود ابهام در مورد عملکرد تابع file_get_contents به اینجا نگاهی بی اندازید. سپس توسط یک foreach ساده و با کمک تابع str_replace مقدار متغیر ها جایگذین نام متغیر ها می شوند. در صورت وجود ابهام در مورد عملکرد تابع str_replace به اینجا نگاهی بی اندازید. در صورت وجود ابهام در مورد عملکرد foreach به اینجا نگاهی بی اندازید کد:
function display($tpl_file) عملکرد فایل آموزش استفاده از کلاس ابتدا فایل کلاس رو صدا زده . سپس یک شی رو به کلاس نسبت داده . سپس یک آرایه رو در موتور تمپلت ذخیره کرده . با استفاده از تابع Display فایل رو نمایش داده . فکر نمی کنم موضوع مبهمی مونده باشه .. موفق باشید. |
|
|
|
| 13 کاربر از hidensoft به خاطر این مطلب مفید تشکر کرده اند: |
|
|
#8 |
|
کاربر دائمی
![]() |
خوشبختانه دوستان زیادی به استفاده از Oop تشویق شدن و دارن روش کار می کنند .
قدم بعدی ساخت یک وبلاگ هست که در ابتدا هیچ امکاناتی نداره ولی در ادامه می خوایم گسترشش بدیم تا دوستان با مفاهیم Mvc .. طراحی دیتا بیس .. منطق کلی Oop .. بیشتر آشنا بشوند . موفق باشید |
|
|
|
|
|
#9 |
|
کاربر دائمی
![]() |
ساخت یک موتور جستو جو گر سریع و کارآمد یکی از دق دقه های یک برنامه نویسه ، من حتی قبل از اینکه یک پروژه رو شروع کنم روس سرچ فکر می کنم . .. امروز یک کلاس بسازیم که به سریع ترین وجه ممکن و به بهترین نحوه به ما جواب مورد نظرمون رو بده ، از همه مهم تر اصولی باشه و قابل ارتقاع و سفارشی باشه ..
class.search.php کد PHP:
کد PHP:
کد:
<form method=post action=process.php>
<table border=1>
<tr>
<td>Search by name, category or keywords</td>
<td><input name=keyword></td>
</tr>
<td> </td>
<td><input type=submit value=Submit></td>
</table>
</form>
کد:
CREATE TABLE `bizmain` ( `biz_id` mediumint(8) unsigned NOT NULL auto_increment, `biz_name` varchar(100) default NULL, `biz_address` varchar(255) default NULL, `biz_phone` varchar(100) default NULL, `biz_email` varchar(100) default NULL, `biz_url` varchar(100) default NULL, `biz_cat` varchar(100) default NULL, PRIMARY KEY (`biz_id`) ) ; INSERT INTO `bizmain` (`biz_id`, `biz_name`, `biz_address`, `biz_phone`, `biz_email`, `biz_url`, `biz_cat`) VALUES (1, 'LocalFilipino.com', 'Makati, Philippines', '(632) 848-0886', 'info@localfilipino.com', 'http://www.localfilipino.com', 'Advertising'), (2, 'Liberty Realty', '2451 S. Buffalo Drive, Suite 145, Las Vegas, NV 89117', '(702) 248-8899', 'info@libertyrealty.com', 'http://www.libertyrealty.com', 'Real Estate, Realty'), (3, 'FRS Philippine Freight', '5960 Spring Mtn Rd, 3-D<br> Las Vegas, NV 89146', '(702) 253-7555', 'info@frsphilippines.com', 'http://www.frsphilippines.com', 'Freight, Cargo'); output.jpg |
|
|
|
|
|
#10 |
|
.
![]() |
به نظرت این پست آخر به OOP ربطی داره؟؟؟؟؟؟؟
__________________
ایمیل من سایت من عضویت در جامعهی اهدای عضوDirect PGP key: http://tinyurl.com/66q5cy PGP key server: keyserver.ubuntu.com PGP name to search: omidmottaghi |
|
|
|
![]() |
| بوک مارک کردن این تاپیک |
| کاربرانی که این تاپیک را مشاهده میکنند: 1 (0 کاربران و 1 مهمان) | |
| ابزار های تاپیک | |
| طریقه نمایش | |
|
|