برنامه نویسی شیء گرا (OOP) در PHP

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
فهرست مطالب:

  1. برنامه نویسی شیء گرا (Object Oriented Programming - OOP) در PHP
  2. ساخت یک شیء (object) توسط یک کلاس (class) در PHP
  3. اجرای توابع تعریف شده در شیء (object) در PHP
  4. تعریف متغیر برای یک کلاس (class)، در PHP


منبع : کلیدستان
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
برنامه نویسی شیء گرا (Object Oriented Programming - OOP) در PHP

برنامه نویسی شیء گرا (Object Oriented Programming - OOP) در PHP

در گذشته، ابتدا برنامه نویسی تابعی (functional) توسط برنامه نویسان استفاده می شد، اما زمانی که برنامه نویسان، مشغول توسعه برنامه های حجیم و سنگین بودند، با مشکلات زیادی مواجه می شدند. با توجه به حجم زیاد کدها، توسعه برنامه نوشته شده، سخت بود و بنابراین برنامه نویسان تلاش کردند که شیوه ای جدید برای برنامه نویسی بیابند که تا این حد برای توسعه برنامه های خود، مشکل نداشته باشند. حاصل این تلاش، برنامه نویسی شیء گرا (Object Oriented Programming - OOP) می باشد.

در برنامه نویسی شیءگرا، از دو مفهوم اصلی ((کلاس)) و ((شیء)) استفاده می شود. برای درک صحیح دو مفهوم کلاس (class) و شیء (object) بهتر است برایتان یک مثال بزنم. فرض کنید ما یک کارخانه تولید ماشین (اتوموبیل) داشته باشیم که ماشین هایی با مشخصات کاملا یکسان تولید می کند (رنگ ، امکانات و ... یکسان می باشد). این ((کارخانه)) را می توانیم به عنوان یک ((کلاس)) در نظر بگیریم و هر ((ماشین)) تولید شده توسط ((کارخانه)) را هم می توانیم به عنوان یک ((شیء)) فرض کنیم. در واقع یک ((کلاس)) می تواند ((شیء)) هایی با مشخصات یکسان تولید کند.

همان طور که ممکن است یک مشتری، از کارخانه، ماشینی را بخرد و سپس رنگ آن را تغییر بدهد، ما نیز ابتدا می توانیم از ((کلاس)) بخواهیم که یک ((شیء)) برای ما بسازد و سپس بر اساس نیازمان، ویژگی هایی از آن را تغییر بدهیم.

در ادامه، سعی می کنم ابتدا مثال هایی را برایتان بزنم و شما کم کم با قابلیت های برنامه نویسی شیء گرا آشنا خواهید شد.

[h=2]ساخت یک کلاس در PHP :[/h]برای ساخت یک کلاس در PHP ، شیوه کلی کدنویسی به این صورت می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]<?php[/B] 
    [B]class[/B] ClassName [COLOR=#009900]{[/COLOR] 
        [COLOR=#666666][I]// code for class [/I][/COLOR]
    [COLOR=#009900]}[/COLOR] 
[B]?>[/B][/FONT]
[/FONT][/COLOR]
بنابراین برای تعریف یک کلاس در PHP ، ابتدا کلمه class را می نویسیم که اعلام می کند که قصد داریم یک کلاس بسازیم. پس از کلمه class ، باید یک نام دلخواه برای کلاس بنویسیم (در مثال بالا، نام ClassName انتخاب شده است). به طور قراردادی، حرف اول نام کلاس را با حرف بزرگ و سایر حروف را با حرف کوچک می نویسند (البته اگر نام را به صورت ترکیب دو کلمه متصل به هم انتخاب کنیم، می توان حرف اول کلمه دوم را نیز بزرگ نوشت تا خوانایی و تشخیص نام کلاس، آسان تر شود، مثل همین نام ClassName که انتخاب کردیم).

پس از نام کلاس، باید کدهای مربوط به کلاس را درون علامت های } و { بنویسیم.

[h=2]تعریف یک تابع (function) برای کلاس در PHP :[/h]هر کلاس می تواند شامل تعدادی تابع (function) باشد. شکل کلی تعریف تابع برای یک کلاس، به صورت زیر می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]<?php[/B] 
    [B]class[/B] ClassName [COLOR=#009900]{[/COLOR] 
        [B]function[/B] function_name[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
            [COLOR=#666666][I]// code for function[/I][/COLOR]
        [COLOR=#009900]}[/COLOR]
    [COLOR=#009900]}[/COLOR] 
[B]?>[/B][/FONT]
[/FONT][/COLOR]
در شکل کلی نمایش داده شده در بالا، تابع تعریف شده برای کلاس ClassName دارای نام function_name می باشد.

به مثال زیر توجه کنید :

[h=4]مثال :[/h]یک کلاس به نام Welcome می سازیم که دارای یک تابع با نام say_hello باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]<?php[/B] 
    [B]class[/B] Welcome [COLOR=#009900]{[/COLOR] 
        [B]function[/B] say_hello[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
            [COLOR=#B1B100]echo[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"hello"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#009900]}[/COLOR]
    [COLOR=#009900]}[/COLOR] 
[B]?>[/B][/FONT]
[/FONT][/COLOR]
تمامی کدهای نوشته شده، تنها برای تعریف کلاس Welcome می باشد. آنچه اهمیت دارد این است که با اجرای کدهای بالا، کلمه hello در خروجی نمایش داده نخواهد شد. علت آن هم این است که وقتی ما در ابتدای کدهای PHP خود، یک کلاس تعریف می کنیم، تا زمانی که از آن کلاس نخواهیم که برای ما یک شیء بسازد، آن کلاس هیچ عملکردی نخواهد داشت (خروجی برای نمایش به کاربر و یا موارد دیگر، نخواهیم داشت).
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
ساخت یک شیء (object) توسط یک کلاس (class) در PHP

ساخت یک شیء (object) توسط یک کلاس (class) در PHP

زمانی که ما یک کلاس (class) تعریف می کنیم، تا زمانی که توسط آن کلاس، یک شیء (object) نسازیم، هیچ اتفاقی نخواهد افتاد. در واقع مثل این است که شما یک کارخانه ساخت ماشین ساخته اید اما خط تولید آن را راه نینداخته اید. بنابراین هیچ ماشینی در خروجی کارخانه وجود نخواهد داشت. زمانی هم که ما یک کلاس تعریف می کنیم اما توسط آن، شیء نسازیم، هیچ خروجی برای استفاده توسط بخش های دیگر کد و یا برای نمایش به کاربر، وجود نخواهد داشت.

اکنون با یک مثال، به شما نشان خواهم داد که چطور می توانیم توسط یک کلاس تعریف شده، یک شیء بسازیم. به مثال زیر توجه کنید :

[h=4]مثال :[/h]کلاسی با نام Welcome می سازیم که دارای یک تابع به نام say_hello است :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]<?php[/B] 
    [B]class[/B] Welcome [COLOR=#009900]{[/COLOR] 
        [B]function[/B] say_hello[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
            [COLOR=#B1B100]echo[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"hello"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#009900]}[/COLOR]
    [COLOR=#009900]}[/COLOR] 
[B]?>[/B][/FONT]
[/FONT][/COLOR]
تابع say_hello را به گونه ای تعریف کرده ایم که با استفاده از تابع echo ، کلمه hello را در خروجی چاپ کند.

با کدهای بالا تنها کلاس را تعریف کرده ایم، اکنون کدهایی می نویسیم که در آنها، یک شیء توسط کلاس ساخته شود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]<?php[/B] 
    [B]class[/B] Welcome [COLOR=#009900]{[/COLOR] 
        [B]function[/B] say_hello[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
            [COLOR=#B1B100]echo[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"hello"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#009900]}[/COLOR]
    [COLOR=#009900]}[/COLOR] 
      
    [COLOR=#000088]$object_name[/COLOR][COLOR=#339933]=[/COLOR][B]new[/B] Welcome[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[B]?>[/B][/FONT]
[/FONT][/COLOR]
یک شیء با نام object_name توسط کلاس Welcome ساخته ایم. به کلمه new دقت کنید. این کلمه برای ساخت یک شیء توسط کلاس به کار می رود، بنابراین کلمه new را به خاطر بسپارید. همچنین دقت کنید که پس از نام کلاس (یعنی Welcome) دو علامت () به کار رفته است.

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

بنابراین نتیجه اجرای کدهای PHP بالا، به این صورت خواهد بود (هیچ خروجی نخواهیم داشت) :
Untitled.jpg

مشاهده می کنید که هیچ چیزی در خروجی نمایش داده نشده است.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
اجرای توابع تعریف شده در شیء (object) در PHP

اجرای توابع تعریف شده در شیء (object) در PHP

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

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]<?php[/B] 
    [B]class[/B] Welcome [COLOR=#009900]{[/COLOR] 
        [B]function[/B] say_hello[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]
            [COLOR=#B1B100]echo[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"hello"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#009900]}[/COLOR]
    [COLOR=#009900]}[/COLOR] 
      
    [COLOR=#000088]$object_name[/COLOR][COLOR=#339933]=[/COLOR][B]new[/B] Welcome[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
      
    [COLOR=#000088]$object_name[/COLOR][COLOR=#339933]->[/COLOR][COLOR=#004000]say_hello[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[B]?>[/B][/FONT]
[/FONT][/COLOR]
کدها رو به صورت بخش بخش توضیح می دهیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]class[/B] Welcome [COLOR=#009900]{[/COLOR] 
    [B]function[/B] say_hello[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]
        [COLOR=#B1B100]echo[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"hello"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
یک کلاس با نام Welcome ساخته ایم که دارای تابعی به نام say_hello است که اگر این تابع اجرا شود، کلمه hello در خروجی نمایش داده می شود.
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#000088]$object_name[/COLOR][COLOR=#339933]=[/COLOR][B]new[/B] Welcome[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
توسط کلاس Welcome یک شیء با نام object_name ساخته ایم. این شیء دارای تمامی توابع تعریف شده در کلاس Welcome خواهد بود.
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#000088]$object_name[/COLOR][COLOR=#339933]->[/COLOR][COLOR=#004000]say_hello[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
اعلام کرده ایم که تابع say_hello از شیء object_name اجرا شود. به نحوه استفاده از علامت های <- دقت کنید و آنها را به خاطر بسپارید.

[h=4]نتیجه :[/h]Untitled.jpg
مشاهده می کنید که تابع say_hello از شیء object_name اجرا شده است و در نتیجه آن، کلمه hello در خروجی نمایش داده شده است.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
تعریف متغیر برای یک کلاس (class)، در PHP

تعریف متغیر برای یک کلاس (class)، در PHP

همان طور که قبلا گفتیم، یک کلاس می تواند دارای تعدادی تابع (function) باشد، که آنها را روش های (methods) کلاس می نامند. علاوه بر تعریف توابع برای کلاس ها، می توانیم برای آنها، تعدادی متغیر (variable) یا ثابت (constant) نیز تعریف کنیم. به مجموع متغیرها و ثابت های تعریف شده برای کلاس، خواص (properties) کلاس گفته می شود. تفاوت متغیرها با ثابت ها در ایناست که مقدار تعریف شده برای ثابت (constant)، غیر قابل تغییر است، اما مقدار تعریف شده برای متغیر (variable) را می توانیم تغییر بدهیم.

اکنون می خواهیم نحوه تعریف یک متغیر برای یک کلاس را شرح بدهیم. به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]<?php[/B] 
     [B]class[/B] Welcome [COLOR=#009900]{[/COLOR]
         [COLOR=#666666][I]// property [/I][/COLOR]
         [B]public[/B] [COLOR=#000088]$var[/COLOR] [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]'a default value'[/COLOR][COLOR=#339933];[/COLOR]
         
         [COLOR=#666666][I]// method [/I][/COLOR]
         [B]function[/B] say_hello[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]
             [COLOR=#B1B100]echo[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"hello"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
         [COLOR=#009900]}[/COLOR]
     [COLOR=#009900]}[/COLOR] 
[B]?>[/B][/FONT]
[/FONT][/COLOR]
همان طور که مشاهده می کنید، یک کلاس با نام Welcome تعریف کرده ایم که دارای یک متغیر و یک تابع است. متغیر دارای نام var و تابع دارای نام say_hello می باشد. شاید کلمه public کمی شما را گیج کرده باشد، زیرا ما در حالت برنامه نویسی عادی PHP ، هنگام تعریف متغیرها، چنین کلمه ای قبل از نام متغیرها نمی نوشتیم. باید بگویم که هر خاصیت (یعنی متغیر یا ثابت) و یا تابعی (روشی) که در یک کلاس تعریف می کنیم، از نظر دیده شدن (Visibility)، باید جزء یکی از سه دسته public یا protected یا private باشد. بهتر است تفاوت این سه دسته را در یک مبحث دیگر، با جزئیات، شرح بدهیم. شما فعلا از دسته public برای تعریف متغیرها استفاده کنید (زیرا متغیرهایی که جزء این دسته باشند، در هر جایی، قابل دسترسی هستند و می توانید از مقدار آنها استفاده کنید).


[h=2]ارجاع به متغیر تعریف شده در یک کلاس :[/h]شیوه ارجاع به متغیر تعریف شده در یک کلاس، در مثال زیر شرح داده شده است :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]<?php[/B] 
      [B]class[/B] Welcome [COLOR=#009900]{[/COLOR]
          [COLOR=#666666][I]// property [/I][/COLOR]
          [B]public[/B] [COLOR=#000088]$var[/COLOR] [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]'hello'[/COLOR][COLOR=#339933];[/COLOR]
          
          [COLOR=#666666][I]// method [/I][/COLOR]
          [B]function[/B] say_hello[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]
              [COLOR=#B1B100]echo[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"hello"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
          [COLOR=#009900]}[/COLOR]
      [COLOR=#009900]}[/COLOR] 
          
      [COLOR=#000088]$object_name[/COLOR][COLOR=#339933]=[/COLOR][B]new[/B] Welcome[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
       
      [COLOR=#000088]$new_var[/COLOR][COLOR=#339933]=[/COLOR][COLOR=#000088]$object_name[/COLOR][COLOR=#339933]->[/COLOR][B]var[/B][COLOR=#339933];[/COLOR]
      [COLOR=#B1B100]echo[/COLOR] [COLOR=#000088]$new_var[/COLOR][COLOR=#339933];[/COLOR]
[B]?>[/B][/FONT]
[/FONT][/COLOR]
ابتدا از کلاس مورد نظر، یک شئ (object) با نام object_name ساخته ایم. سپس توسط کد زیر، مقدار متغیر با نام var که درون شیء وجود دارد (زیرا شیء دارای تمام ویژگی های کلاسی است که از آن ساخته شده) را در متغیر با نام new_var ذخیره کرده ایم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#000088]$new_var[/COLOR][COLOR=#339933]=[/COLOR][COLOR=#000088]$object_name[/COLOR][COLOR=#339933]->[/COLOR][B]var[/B][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
در انتها، مقدار ذخیره شده در متغیر new_var را با دستور echo در خروجی چاپ کرده ایم.

[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]hello[/FONT]
[/FONT][/COLOR]
[h=2]ارجاع به متغیر تعریف شده در کلاس، از درون یک تابع از کلاس :[/h]برای آشنایی با نحوه ارجاع به متغیر تعریف شده در کلاس، از درون یک تابع از کلاس، به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]<?php[/B] 
      [B]class[/B] Welcome [COLOR=#009900]{[/COLOR]
          [COLOR=#666666][I]// property [/I][/COLOR]
          [B]public[/B] [COLOR=#000088]$var[/COLOR] [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]'hello'[/COLOR][COLOR=#339933];[/COLOR]
          
          [COLOR=#666666][I]// method [/I][/COLOR]
          [B]function[/B] say_hello[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]
              [COLOR=#B1B100]echo[/COLOR][COLOR=#009900]([/COLOR][COLOR=#000088]$this[/COLOR][COLOR=#339933]->[/COLOR][B]var[/B][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
          [COLOR=#009900]}[/COLOR]
      [COLOR=#009900]}[/COLOR] 
          
      [COLOR=#000088]$object_name[/COLOR][COLOR=#339933]=[/COLOR][B]new[/B] Welcome[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
       
      [COLOR=#000088]$object_name[/COLOR][COLOR=#339933]->[/COLOR][COLOR=#004000]say_hello[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[B]?>[/B][/FONT]
[/FONT][/COLOR]
همان طور که مشاهده می کنید، درون تابع say_hello از کلاس، به متغیر var ارجاع داده ایم، اما نکته مهم این است که شیوه ارجاع، به صورت زیر می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#000088]$this[/COLOR][COLOR=#339933]->[/COLOR][B]var[/B][/FONT]
[/FONT][/COLOR]
فعلا با مفهوم مربوط به $this کاری نداریم، تنها در همین حد بدانید که یک شبه متغیر (pseudo-variable) است.

بعد از تعریف کلاس، یک شیء با نام object_name از آن کلاس ساخته ایم و سپس روش say_hello از شیء ساخته شده را اجرا کرده ایم.

[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]hello[/FONT]
[/FONT][/COLOR]
 

Similar threads

بالا