شی گرایی در PHP

برنامه نویسی رویه ای شامل نوشتن رویه ها یا توابعی است که عملیاتی را بر روی داده ها انجام می دهند. در حالی که برنامه نویسی شی گرا به ایجاد اشیایی که شامل داده ها و توابع هستند می پردازد.

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

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

تعریف کلاس

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

در مثال زیر کلاس fruit شامل دو ویژگی رنگ ($color) و نام ($name) و دو متد برای تنظیم و برگرداندن نام تعریف می شود:

<?php
class Fruit {
  // Properties
  public $name;
  public $color;

  // Methods
  function set_name($name) {
    $this->name = $name;
  }
  function get_name() {
    return $this->name;
  }
}
?> 

در برنامه نویسی شی گرا از <- برای دسترسی به ویژگی یا متد آن کلاس از طریق شی استفاده می شود.

تعریف شی

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

اشیا یک کلاس با کلمه کلیدی new ایجاد می گردند.

مثال:

<?php
class Fruit {
  // Properties
  public $name;
  public $color;

  // Methods
  function set_name($name) {
    $this->name = $name;
  }
  function get_name() {
    return $this->name;
  }
}

$apple = new Fruit();
$banana = new Fruit();
$apple->set_name('Apple');
$banana->set_name('Banana');

echo $apple->get_name();
echo "<br>";
echo $banana->get_name();
?> 

در مثال فوق، اشیا $apple و $banana دو نمونه از کلاس Fruit هستند.

کلمه کلیدی $this برای اشاره به شی فعلی کلاس استفاده می شود و تنها درون متدها در دسترس است.

متد سازنده کلاس

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

مثال: ایجاد شی با نام Apple با کمک متد سازنده

<?php
class Fruit {
  public $name;
  public $color;

  function __construct($name) {
    $this->name = $name; 
  }
  function get_name() {
    return $this->name;
  }
}

$apple = new Fruit("Apple");
echo $apple->get_name();
?> 

تعیین سطح دسترسی به متدها و ویژگی ها

سطح دسترسی به متدها و ویژگی های یک کلاس با کمک سه کلمه کلیدی public، protected و private تعیین می گردد.

Public: ویژگی یا متد می تواند از هر جایی مورد استفاده و دسترسی قرار گیرد.

Protected: ویژگی یا متد می توان توسط این کلاس و کلاس هایی که از آن مشتق می شوند مورد دسترسی قرار گیرد.

Private: ویژگی یا متد تنها در همین کلاس می تواند مورد دسترسی قرار گیرد.

مثال:

<?php
class Fruit {
  public $name;
  protected $color;
  private $weight;
}

$mango = new Fruit();
$mango->name = 'Mango'; // OK 
$mango->color = 'Yellow'; // ERROR
$mango->weight = '300'; // ERROR
?> 

در مثال فوق، چون دو ویژگی color و weight به صورت public نیستند در خارج از کلاس نمی تواند آنها را مقداردهی کرد.

متدها و ویژگی های استاتیک

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

مثال:

<?php
class greeting {

public static $value = 17153;

  public static function welcome() {
    echo "Hello World!";
  }
}

// Call static method
greeting::welcome();

// Call static property
echo greeting::$value;
?> 

برای دسترسی به یک متد یا ویژگی استاتیک در متدی از همان کلاس، از کلمه کلیدی self به علاوه :: می توان استفاده کرد.

<?php
class greeting {

public static $value = 1234;
  public static function welcome() {
    echo "Hello World!";
  }

  public function __construct() {
    self::welcome();
  }

  public function staticValue() {
    return self::$value;
  }
}

$greeting = new greeting();
echo $greeting->staticValue();
?> 

تعریف ثابت ها در کلاس

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

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

مثال:

 <?php
class Goodbye {
  const LEAVING_MESSAGE = "Thank you for visiting my Website!";
}

echo Goodbye::LEAVING_MESSAGE;
?> 

برای دسترسی به ثابت درون همان کلاس از self به علاوه :: و به دنبال آن نام ثابت استفاده می شود.

مثال:

 <?php
class Goodbye {
  const LEAVING_MESSAGE = "Thank you for visiting my website!";
  public function byebye() {
    echo self::LEAVING_MESSAGE;
  }
}

$goodbye = new Goodbye();
$goodbye->byebye();
?> 

پست های مرتبط

Leave a Comment