اسفند ۲, ۱۳۹۷ Mostafa بدون دیدگاه

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

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

برنامه نویسی شی گرا در php

Object Oriented Programming به معنای برنامه نویسی شی گرا است که در بسیاری از مواقع از مخفف آن OOP استفاده میشود. این روش برنامه نویسی  در PHP4 ایجاد شد و در php5  کمی توسعه یافت. در این درس میخواهیم  برنامه نویسی شی گرا و اجزای آن را معرفی کنیم.

اساس برنامه نویسی شی گرا و شی ها در PHP

در دنیای واقعی یک سری شی در اطراف ما است که هر کدام کار انجام میدهند برای مثال : ماشین و لامپ. با استفاده از ماشین میتوانیم رانندگی کنیم و لامپ ایجاد روشنایی میکند. این ها تنها عملکردی است که ما به چشم می بینیم اما این اشیا فقط این ویژگی ها را دارا نمی باشند. ماشین میتواند با یک سرعت و مسیر خاص حرکت کند، لامپ میتواند روشن یا خاموش باشد، گرما تولید و در یک زمان مشخص میزان وات مشخصی مصرف کند.

در PHP نیز اشیا همان گونه هستند، میتوانید به آنها ویژگی خاص اختصاص دهید با این تفاوت که کاربران این ویژگی را در صفحه اصلی سایت مشاهده و با آن ها ارتباط برقرا میکنند. شما میتوانید با استفاده از برنامه نویسی شی گرا به هر یک از این اشیا بگویید چه صفتی و ویژ گی داشته باشند، چگونه ارزیابی شوند و یا تغییر کنند.

کلاس ها در برنامه نویسی شی گرا

PHP  یک راه بسیار ساده برای استفاده از اشیا در برنامه نویسی شی گرا تعریف کرده است و آن هم کلاس ها هستند. کلاس ها یک بسته بندی مشخص از اشیا با تمامی ویژگی ها و روش ها است. میتوانیم این گونه تصور کنید که کلاس ها نماینده های برنامه ریزی کننده برای اشیا هستند و رابط آن ها  با افراد در محیط اصلی سایت کد ها PHP است! میتوانید یک بار کلاس PHP را تعریف کنید و در صورتی که نیاز داشتید بی نهایت بار از آن استفاده کنید.

یک نمونه از این برنامه نویسی شی گر

<?php
class Image {
    public function Image() {
        echo "We just created and object!";
    }
}
$image = new Image(); // prints "We just created and object!"
?>

 

کلاس ها در PHP

برای تعریف یک کلاس ها در PHP از کلمه class استفاده میکنیم. این کلاس میتواند شامل خصوصیات مختلف عمومی یا خصوصی باشد. به نحوه معرفی کلاس ها در PHP دقت کنید:

<?php
class person {

}
?>

 

در این نمونه برای class نامی انتخاب کردیم. همیشه کلاس ها با یک نام مشخص میشوند که بیان کننده هدف ما از طراحی است. در زمان نام گذاری یک کلاس دقت داشته باشید که نام یک کلاس نمی تواند عدد باشد.

پس از معرفی کلاس ها به معرفی خصوصیات می پردازیم. خاصیت ها در واقع متغیرهایی هستند که درون کلاس تعریف میشوند. خصوصیات در کلاس ها را با استفاده از مثال زیر توضیح خواهم داد.

<?php
class Emailer {
private $sender;
private $recipients;
private $subject;
private $body;
public function __construct($sender) {
$this->sender = $sender;
$this->recipients = array();
}
public function AddRecipients($recipient) {
array_push($this->recipients, $recipient);
}
public function SetSubject($subject) {
$this->subject = $subject;
}
public function SetBody($body) {
$this->body = $body;
}
public function SendEmail() {
foreach ($this->recipients as $recipient) {
$result = mail($recipient, $this->subject, $this->body, "From: {$this->sender}\r\n");
if ($result) {
echo "Mail successfully sent to {$recipient}<br/>" . PHP_EOL;
}
}
}
}
?>

 

نام این کلاس Emailer است. همان طور که مشاهده می کنید خصوصیات درون کلاس ها به صورت private مشخص شده اند. private بودن خواص یعنی تنها میتوانید درون کلاس از آن ها استفاده کنید بنابراین باعث افزایش امنیت در برنامه نویسی تعریف اشیا میشود. در برخی کتاب ها یا منبع های دیگر شاید خاصیت ها را با نام “فیلد” نیز مشاهده کنید. در این مثال sender ، $recipients ، $subject و body  خصوصیات کلاس Emailer هستند.

عنصر بعدی که با آن در کلاس های PHP مواجه میشوید، متد ها هستند. متد ها نیز چیز جدیدی نیستند، متد ها همان توابعی هستند که درون کلاس ها در PHP تعریف میشوند. در این مثال ۵ متد داریم. همان طور که مشاهده میکنید متد ها را به صورت public یا عمومی تعریف کرده ایم. یعنی هرگاه در برنامه یک شی ایجاد کنیم، متد ها از طریق شی های مرتبط میتوانند فراخوانی شوند. به عبارت دیگر در صورتی که خصوصی با private باشد تنها درون کلا در دسترس است و از طریق اشیا نمی توانیم به آن متد دسترسی داشته باشیم.

نام گذاری عناصر درون کلاس

برای نام گذاری عناصر درون کلاس ها یک قرار داد جهانی وجود دارد. همان طور که گفتم این تنها قرار داد است نه قانون.

  • حرف اول عناصر Private کوچک و حروف اول دیگر کلمات درون این عنصر بزرگ باشد مانند :myFirstValue
  • حرف اول تمامی کلمات عناصر public بزرگ و بقیه حروف به صورت کوچک باشد مانند : MyFirstValue

 

معرفی اشیا درون کلاس PHP

حال میخواهیم به فیلد ها  دسترسی پیدا کنیم و اشیا درون کلاس PHP را معرفی کنیم. به عنوان نمونه یک بخشی از مثال درس قبل را توضیح میدهم

public function SetBody($body) {
$this->body = $body;
}

 

در ابتدای این کد فیلد Body را به صورت private تعریف کردیم. حال میخواهیم این فیلد را درون یک متد به کارببریم. برای این کار از this$ استفاده میکنیم. this$ تنها به شی اشاره میکند. بنابراین  this$->body  یعنی فیلد  body از شی ای که درون متد SetBody تعریف شده فراخوانی میشه.

نکته : لازم نیست بعد از فلش this$ فیلد ها را با $ تعریف کنید. PHP خود متوجه میشود که آن فیلد است نه متد. ( بعد از متد ها همیشه { می آید )

کد مثال درس قبل را دوباره قرار میدهم :

<?php
class Emailer {
private $sender;
private $recipients;
private $subject;
private $body;
public function __construct($sender) {
$this->sender = $sender;
$this->recipients = array();
}
public function AddRecipients($recipient) {
array_push($this->recipients, $recipient);
}
public function SetSubject($subject) {
$this->subject = $subject;
}
public function SetBody($body) {
$this->body = $body;
}
public function SendEmail() {
foreach ($this->recipients as $recipient) {
$result = mail($recipient, $this->subject, $this->body, "From: {$this->sender}\r\n");
if ($result) {
echo "Mail successfully sent to {$recipient}<br/>" . PHP_EOL;
}
}
}
}
?>

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

معرفی اشیا درون کلاس PHP

برای معرفی یک شی از کلمه new استفاده می کنیم. به مثال زیر دقت کنید:

<?php
 
    $emailerObject = new Emailer('mmshfe@gmail.com');
?>

بدین ترتیب یک شی به نام emailerObject ایجاد کردیم. در این مثال در بخش construct_ یک مقدار ورودی قرار دادیم (sender$). بنابراین هنگام ساختن شی جدید نیز باید برای آن مقدار در نظر بگیریم. تابع construct_ مقدار سازنده کلاس را در برمیگیرد. به جای آن میتوانید نام کلاس را نیز قرار دهید اما باید توجه داشته باشید که با تغییر نام کلاس ،باید نام این تابع سازنده را نیز تغییر دهید.  حال میخواهیم با استفاده از این کلاس یک ایمیل ارسال کنیم.

<?php  
 
   $emailerObject = new Emailer('mmshfe@gmail.com');
   $emailerObject->AddRecipient('info@xoogle.ir');
   $emailerObject->SetSubject('Test');
   $emailerObject->SetBody('Hi, I\'m a test email!');
   $emailerObject->SendEmail();
 
?>

در این شی جدید مقدار فرستنده mmshfe@gmail.com است، با استفاده از متد AddReciptient یک گیرنده فراخوانی اضافه کردیم، با استفاده از متد SetSubject یک عنوان اضافه شد و به همین ترتیب بخش های دیگر تعریف شده اند.

حال با استفاده از این کلاس میتوانیم یک ایمیل ارسال کنیم.


برچسب ها
نظرات

توجه : لطفاً فقط نظرات خود را از این طریق ارسال نمایید و سوالات و مشکلات خود را در انجمن سایت مطرح نمایید.