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

3 سال پیش
آموزش برنامه نویسی شی گرا در PHP

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

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش برنامه نویسی شی گرا در PHP خواهیم پرداخت.

ما می توانیم جهان خود را از اجسام مختلف مانند خورشید، زمین، ماه و غیره تصور کنیم. به همین ترتیب می توانیم ماشین خود را از اجسام مختلف مانند چرخ، فرمان، دنده و غیره تصور کنیم. به همین ترتیب مفاهیم برنامه نویسی شی گرا وجود دارد که همه چیز را به عنوان یک جسم فرض می کنند و یک نرم افزار را با استفاده از اشیا different مختلف پیاده سازی کنید.

 

مفاهیم شی گرا

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

 

  • Class – این یک نوع داده تعریف شده توسط برنامه نویس است که شامل توابع محلی و همچنین داده های محلی است. شما می توانید یک کلاس را به عنوان الگویی برای ساخت نمونه های بسیاری از همان نوع (یا کلاس) شی در نظر بگیرید.
  • Object  – یک نمونه منفرد از ساختار داده است که توسط یک کلاس تعریف شده است. شما یک کلاس را یک بار تعریف می کنید و سپس اشیا زیادی را به آن تعلق می گیرید. اشیا به عنوان نمونه نیز شناخته می شوند.
  • Member Variable – اینها متغیرهایی هستند که در داخل یک کلاس تعریف شده اند. این داده ها برای خارج از کلاس قابل مشاهده نیستند و از طریق توابع عضو قابل دسترسی هستند. به محض ایجاد شی once ، به این متغیرها صفت شی the گفته می شود.
  • تابع Member – این تابع تعریف شده در داخل یک کلاس است و برای دسترسی به داده های شی استفاده می شود.
  • وراثت – هنگامی که یک کلاس با به ارث بردن عملکرد موجود یک کلاس پدر تعریف می شود ، آن را وراثت می نامند. در اینجا کلاس child از توابع یا متغیرهای عضو یا کم یک کلاس والدین به ارث می رسد.
  • کلاس والدین – کلاسی که کلاس دیگری از آن به ارث می برد. به این کلاس کلاس پایه یا فوق کلاس نیز گفته می شود.
  • کلاس کودک – کلاسی که از کلاس دیگری به ارث می رسد. به این کلاس کلاس فرعی یا مشتق شده نیز گفته می شود.
  • چندشکلی – این یک مفهوم شی گرا است که در آن می توان از یک عملکرد برای اهداف مختلف استفاده کرد. به عنوان مثال نام تابع یکسان باقی می ماند اما تعداد مختلفی از آرگومان ها را می گیرد و می تواند کار متفاوتی انجام دهد.
  • Overloading – نوعی چندشکلی که در آن برخی یا همه اپراتورها بسته به نوع استدلال های خود پیاده سازی های مختلفی دارند. عملکردهای مشابه نیز می توانند با اجرای متفاوت بارگیری شوند.
  • Data Abstraction – هر نمایش داده ای که جزئیات پیاده سازی در آن پنهان باشد (چکیده).
  • Encapsulation – به مفهومی گفته می شود که در آن همه داده ها و توابع عضو را با هم ترکیب می کنیم تا یک شی form را تشکیل دهیم.
  • سازنده – به نوع خاصی از عملکرد گفته می شود که هر زمان تشکیل یک جسم از یک کلاس وجود داشته باشد ، به طور خودکار فراخوانی می شود.
  • Destructor – به نوع خاصی از عملکرد گفته می شود که هر زمان که یک شی an حذف شد یا از محدوده آن خارج شد ، به طور خودکار فراخوانی می شود.

تعریف کلاس های PHP

فرم کلی برای تعریف کلاس جدید در PHP به شرح زیر است –

<?php
   class phpClass {
      var $var1;
      var $var2 = "constant string";
      
      function myfunc ($arg1, $arg2) {
         [..]
      }
      [..]
   }
?>

 

در اینجا شرح هر کد آمده است –

  • کلاس فرم ویژه و به دنبال آن نام کلاسی که می خواهید تعریف کنید.
  • مجموعه ای از آکولادها که هر تعداد اعلان متغیر و تعریف تابع را در بر می گیرد.
  • اظهارات متغیر با فرم ویژه var شروع می شود ، که به دنبال آن یک نام متغیر متعارف $ قرار می گیرد. همچنین ممکن است انتساب اولیه به یک مقدار ثابت داشته باشند.
  • تعاریف تابع بسیار شبیه توابع PHP مستقل هستند اما محلی برای کلاس هستند و برای تنظیم و دسترسی به داده های شی استفاده می شوند.

 

مثال

در اینجا مثالی آورده شده است که یک کلاس از نوع کتابها را تعریف می کند –

<?php
   class Books {
      /* Member variables */
      var $price;
      var $title;
      
      /* Member functions */
      function setPrice($par){
         $this->price = $par;
      }
      
      function getPrice(){
         echo $this->price ."<br/>";
      }
      
      function setTitle($par){
         $this->title = $par;
      }
      
      function getTitle(){
         echo $this->title ." <br/>";
      }
   }
?>

 

ایجاد اشیا در PHP

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

$physics = new Books;
$maths = new Books;
$chemistry = new Books;

 

در اینجا ما سه شی ایجاد کرده ایم و این اشیا are مستقل از یکدیگر هستند و به طور جداگانه وجود خواهند داشت. در ادامه نحوه دستیابی به تابع عضو و پردازش متغیرهای عضو را خواهیم دید.

 

فراخوانی توابع عضو

پس از ایجاد اشیا خود، قادر خواهید بود توابع عضو مربوط به آن شی را فراخوانی کنید. یک تابع عضو فقط قادر به پردازش متغیر عضو از شی مرتبط است.

 

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

 

$physics->setTitle( "Physics for High School" );
$chemistry->setTitle( "Advanced Chemistry" );
$maths->setTitle( "Algebra" );

$physics->setPrice( 10 );
$chemistry->setPrice( 15 );
$maths->setPrice( 7 );

 

اکنون شما برای دریافت مقادیر تنظیم شده در مثال بالا توابع عضوی دیگر را فراخوانی می کنید –

$physics->getTitle();
$chemistry->getTitle();
$maths->getTitle();
$physics->getPrice();
$chemistry->getPrice();
$maths->getPrice();

 

این نتیجه زیر را ایجاد می کند –

Physics for High School
Advanced Chemistry
Algebra
۱۰
۱۵
۷

 

توابع سازنده

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

PHP برای تعریف سازنده یک تابع ویژه به نام ()construction __  ارائه می دهد. می توانید به اندازه آرگومان هایی که دوست دارید به تابع سازنده منتقل کنید.

مثال زیر یک سازنده برای کلاس Books ایجاد می کند و قیمت و عنوان کتاب را در زمان ایجاد شی اولیه می کند.

function __construct( $par1, $par2 ) {
   $this->title = $par1;
   $this->price = $par2;
}

 

اکنون برای تنظیم قیمت و عنوان نیازی به فراخوانی تابع set نداریم. ما می توانیم این دو متغیر عضو را فقط در زمان ایجاد شی مقداردهی اولیه کنیم. مثال زیر را بررسی کنید –

$physics = new Books( "Physics for High School", 10 );
$maths = new Books ( "Advanced Chemistry", 15 );
$chemistry = new Books ("Algebra", 7 );

/* Get those set values */
$physics->getTitle();
$chemistry->getTitle();
$maths->getTitle();

$physics->getPrice();
$chemistry->getPrice();
$maths->getPrice();

 

این نتیجه زیر را ایجاد می کند –

Physics for High School
 Advanced Chemistry
 Algebra
 ۱۰
 ۱۵
 ۷

 

 

Destructor

مانند یک تابع سازنده می توانید یک تابع تخریبگر را با استفاده از تابع ()destruct__  تعریف کنید. شما می توانید تمام منابع را با یک مخرب آزاد کنید.

وراثت

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

class Child extends Parent {
   <definition body>
}

 

اثر وراثت این است که کلاس کودک (یا زیر کلاس یا کلاس مشتق شده) دارای مشخصات زیر است –

  • به طور خودکار تمام اعلان های متغیر عضو کلاس پدر را دارد.
  • به طور خودکار همه عملکردهای عضو مشابه والد را دارد ، که (به طور پیش فرض) به همان روشی که این توابع در والدین انجام می دهند، کار خواهد کرد.

به عنوان مثال کلاس Books را به ارث برده و بر اساس نیاز ، قابلیت های بیشتری را به آن اضافه می کند.

class Novel extends Books {
   var $publisher;
   
   function setPublisher($par){
      $this->publisher = $par;
   }
   
   function getPublisher(){
      echo $this->publisher. "<br />";
   }
}

 

اکنون جدای از توابع وراثتی، کلاس Novel دو تابع عضو اضافی را نگه می دارد.

Function Overriding

تعاریف تابع در کلاسهای کودک تعاریف با همان نام را در کلاسهای والد نادیده می گیرند. در کلاس فرزند ، می توانیم تعریف تابعی را که از کلاس والد به ارث برده است ، اصلاح کنیم.

در مثال زیر توابع getPrice و getTitle برای برگرداندن برخی مقادیر لغو می شوند.

function getPrice() {
   echo $this->price . "<br/>";
   return $this->price;
}
   
function getTitle(){
   echo $this->title . "<br/>";
   return $this->title;
}

 

اعضای عمومی

مگر اینکه خلاف آن مشخص کنید، خصوصیات و متدهای یک کلاس عمومی هستند. به عبارت دیگر، ممکن است در سه حالت ممکن به آنها دسترسی پیدا شود –

  • از خارج کلاسی که در آن اعلام شده است
  • از درون کلاسی که در آن اعلام شده است
  • از درون کلاس دیگری که کلاسی را که در آن اعلام شده است پیاده سازی می کند

تاکنون ما همه اعضا را به عنوان اعضای عمومی دیده ایم. اگر می خواهید دسترسی اعضای یک کلاس را محدود کنید ، اعضای کلاس را خصوصی یا محافظت شده تعریف می کنید.

اعضای خصوصی

با تعیین یک عضو خصوصی ، دسترسی آن را به کلاسی که در آن اعلام شده محدود می کنید. عضو خصوصی را نمی توان از کلاسهایی که کلاسی را در آن اعلان می کنند ارجاع داد و از خارج از کلاس قابل دسترسی نیست.

یک عضو کلاس را می توان با استفاده از کلمه کلیدی خصوصی در مقابل عضو، خصوصی کرد.

class MyClass {
   private $car = "skoda";
   $driver = "SRK";
   
   function __construct($par) {
      // Statements here run every time
      // an instance of the class
      // is created.
   }
   
   function myPublicFunction() {
      return("I'm visible!");
   }
   
   private function myPrivateFunction() {
      return("I'm  not visible outside!");
   }
}

 

هنگامی که کلاس MyClass با استفاده از برنامه های افزودنی به کلاس دیگری ارث می رود، ()myPublicFunction  و driver$ نیز قابل مشاهده هستند. کلاس توسعه دهنده هیچگونه آگاهی یا دسترسی به myPrivateFunction و car$ نخواهد داشت، زیرا آنها خصوصی اعلام می شوند.

اعضای محافظت شده

یک ویژگی یا روش محافظت شده در کلاسی که در آن اعلام شده است و همچنین در کلاسهایی که آن کلاس را گسترش می دهند قابل دسترسی است. اعضای محافظت شده خارج از این دو نوع کلاس در دسترس نیستند. با استفاده از کلمه کلیدی محافظت شده در مقابل عضو، می توان از یک عضو کلاس محافظت کرد.

در اینجا نسخه مختلف MyClass وجود دارد –

class MyClass {
   protected $car = "skoda";
   $driver = "SRK";

   function __construct($par) {
      // Statements here run every time
      // an instance of the class
      // is created.
   }
   
   function myPublicFunction() {
      return("I'm visible!");
   }
   
   protected function myPrivateFunction() {
      return("I'm  visible in child class!");
   }
}

 

رابط ها

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

از PHP5، تعریف یک رابط مانند این امکان پذیر است –

interface Mail {
   public function sendMail();
}

 

سپس، اگر کلاس دیگری آن رابط را اجرا کرد، مانند این –

class Report implements Mail {
   // sendMail() Definition goes here
}

 

ثابت ها

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

اعلام یک ثابت آسان است، همانطور که در این نسخه از MyClass انجام می شود –

class MyClass {
   const requiredMargin = 1.7;
   
   function __construct($incomingValue) {
      // Statements here run every time
      // an instance of the class
      // is created.
   }
}

 

در این کلاس ، requiredMargin یک ثابت است. با کلمه کلیدی const اعلام می شود و تحت هیچ شرایطی نمی توان آن را به چیزی غیر از ۱٫۷ تغییر داد. توجه داشته باشید که نام ثابت مانند $ متغیرها $ پیشرو ندارد.

Abstract Classes

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

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

abstract class MyAbstractClass {
   abstract function myAbstractFunction() {
   }
}

 

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

کلمه کلیدی استاتیک

اعلان اعضای کلاس یا روش ها به صورت ساکن ، بدون نیاز به نمونه سازی از کلاس، آنها را در دسترس قرار می دهد. عضوی که به عنوان ساکن اعلام شده است با یک شی کلاس فوری قابل دسترسی نیست (اگرچه یک روش استاتیک می تواند).

مثال زیر را امتحان کنید –

<?php
   class Foo {
      public static $my_static = 'foo';
      
      public function staticValue() {
         return self::$my_static;
      }
   }
    
   print Foo::$my_static . "\n";
   $foo = new Foo();
   
   print $foo->staticValue() . "\n";
?>

 

کلید واژه نهایی

PHP 5 کلیدواژه نهایی را معرفی می کند ، که با پیشوند تعریف با final از کلاسهای کودک جلوگیری می کند. اگر کلاس در حال تعریف نهایی باشد ، نمی توان آن را تمدید کرد.

نتایج زیر به خطای Fatal منجر می شود: نمی توان روش نهایی را لغو کرد BaseClass() :: moreTesting

<?php

   class BaseClass {
      public function test() {
         echo "BaseClass::test() called<br>";
      }
      
      final public function moreTesting() {
         echo "BaseClass::moreTesting() called<br>";
      }
   }
   
   class ChildClass extends BaseClass {
      public function moreTesting() {
         echo "ChildClass::moreTesting() called<br>";
      }
   }
?>

 

فراخوانی سازندگان والد

به جای نوشتن یک سازنده کاملاً جدید برای زیر کلاس ، بیایید آن را با فراخوانی صریح سازنده والد و سپس انجام هر کاری که علاوه بر این برای ایجاد طبقه زیر ، لازم است ، بنویسیم. در اینجا یک مثال ساده –

class Name {
   var $_firstName;
   var $_lastName;
   
   function Name($first_name, $last_name) {
      $this->_firstName = $first_name;
      $this->_lastName = $last_name;
   }
   
   function toString() {
      return($this->_lastName .", " .$this->_firstName);
   }
}
class NameSub1 extends Name {
   var $_middleInitial;
   
   function NameSub1($first_name, $middle_initial, $last_name) {
      Name::Name($first_name, $last_name);
      $this->_middleInitial = $middle_initial;
   }
   
   function toString() {
      return(Name::toString() . " " . $this->_middleInitial);
   }
}

 

در این مثال ، ما یک کلاس والد (Name) داریم که یک سازنده دو آرگومان دارد و یک زیر کلاس (NameSub1) که یک سازنده سه آرگومان دارد. سازنده NameSub1 با فراخوانی سازنده اصلی خود با صراحت با استفاده از نحو :: (عبور دو آرگومان از آن) و سپس تنظیم یک قسمت اضافی، تابع های خود را انجام می دهد. به طور مشابه، NameSub1 عملکرد غیر سازنده خود را به  ()Name از نظر تابع والدی که لغو می کند ، تعریف می کند.

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

 

منبع.

 

 

لیست جلسات قبل آموزش PHP

  1. آموزش PHP
  2. معرفی PHP
  3. آموزش تنظیمات محیط PHP
  4. آموزش نحو PHP
  5. آموزش انواع متغیر در PHP
  6. آموزش انواع ثابت ها در PHP
  7. آموزش انواع عملگرها در PHP
  8. آموزش تصمیم گیری در PHP
  9. آموزش انواع حلقه در PHP
  10. آموزش آرایه ها در PHP
  11. آموزش رشته ها در PHP
  12. آموزش مفاهیم وب در PHP
  13. آموزش روش های  GET & POST در PHP
  14. آموزش Inclusion فایل در PHP
  15. آموزش پرونده ها و I / O در PHP
  16. آموزش توابع در PHP
  17. آموزش کوکی ها در PHP
  18. آموزش جلسات در PHP
  19. آموزش ارسال ایمیل با استفاده از PHP
  20. آموزش بارگذاری پرونده در PHP
  21. آموزش استاندارد کدگذاری در PHP
  22. آموزش متغیرهای از پیش تعریف شده در PHP
  23. آموزش عبارات منظم در PHP
  24. آموزش مدیریت خطا و استثنا در PHP
  25. آموزش اشکال زدایی در PHP
  26. آموزش تاریخ و زمان در PHP
  27. آموزش MySQL در PHP
  28. آموزش AJAX در PHP
  29. آموزش XML در PHP
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه