میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

وراثت در PHP

هنگامی که یک کلاس از کلاس دیگری نشات می گیرد. وراثت گفته می شود .

کلاس کودک کلیه خصوصیات و متد های public  و protected را از کلاس والدین به ارث می برد. علاوه بر این ، می تواند خواص و متد های خاص خود را داشته باشد.

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

بیایید به یک مثال نگاه کنیم:

مثال

<?php
class Fruit {
public $name;
public $color;
public function __construct($name, $color) {
$this->name = $name;
$this->color = $color;
}
public function intro() {
echo “The fruit is {$this->name} and the color is {$this->color}.”;
}
}
// Strawberry is inherited from Fruit
class Strawberry extends Fruit {
public function message() {
echo “Am I a fruit or a berry? “;
}
}
$strawberry = new Strawberry(“Strawberry”“red”);
$strawberry->message();
$strawberry->intro();
?>

کلاس Strawberry از کلاس Fruit به ارث می رسد.

این بدان معنی است که کلاس Strawberry به دلیل وراثت می تواند از ویژگی های عمومی $name و $color  و همچنین از روش های عمومی __construction () و intro () از کلاس Fruit استفاده کند.

کلاس Strawberry نیز متد خاص خود را دارد: message ().


وراثت و سطح دسترسی Protected

در بخش قبل یاد گرفتیم که protectedمی توان به خصوصیات یا متدها در کلاس و توسط کلاسهای مشتق شده از آن کلاس دسترسی داشت. معنی آن چیست؟

بیایید به یک مثال نگاه کنیم:

مثال

<?php
class Fruit {
public $name;
public $color;
public function __construct($name, $color) {
$this->name = $name;
$this->color = $color;
}
protected function intro() {
echo “The fruit is {$this->name} and the color is {$this->color}.”;
}
}
class Strawberry extends Fruit {
public function message() {
echo “Am I a fruit or a berry? “;
}
}

// Try to call all three methods from outside class
$strawberry = new Strawberry(“Strawberry”“red”);  // OK. __construct() is public
$strawberry->message(); // OK. message() is public
$strawberry->intro(); // ERROR. intro() is protected
?>

در مثال بالا می بینیم که اگر بخواهیم یک protected متد (intro ()) را از خارج کلاس فراخوانی کنیم ، خطایی دریافت خواهیم کرد.

بیایید به یک مثال دیگر نگاه کنیم:

مثال

<?php
class Fruit {
public $name;
public $color;
public function __construct($name, $color) {
$this->name = $name;
$this->color = $color;
}
protected function intro() {
echo “The fruit is {$this->name} and the color is {$this->color}.”;
}
}
class Strawberry extends Fruit {
public function message() {
echo “Am I a fruit or a berry? “;
// Call protected method from within derived class – OK
    $this -> intro();
}
}

$strawberry = new Strawberry(“Strawberry”“red”); // OK. __construct() is public
$strawberry->message(); // OK. message() is public and it calls intro() (which is protected) from within the derived class
?>

در مثال بالا می بینیم که همه خوب کار می کنند! به این دلیل است که ما protected متد (intro ()) را از داخل کلاس مشتق شده فراخوانی می کنیم .


متد های ارثی غالب

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

به مثال زیر نگاه کنید. متد های __construction () و intro () در کلاس فرزند (Strawberry) متد های __construction () و intro () را در کلاس والدین (Fruit) غلبه خواهد کرد:

مثال

<?php
class Fruit {
public $name;
public $color;
public function __construct($name, $color) {
$this->name = $name;
$this->color = $color;
}
public function intro() {
echo “The fruit is {$this->name} and the color is {$this->color}.”;
}
}
class Strawberry extends Fruit {
public $weight;
public function __construct($name, $color, $weight) {
$this->name = $name;
$this->color = $color;
$this->weight = $weight;
}
public function intro() {
echo “The fruit is {$this->name}, the color is {$this->color}, and the weight is {$this->weight} gram.”;
}
}

$strawberry = new Strawberry(“Strawberry”“red”۵۰);
$strawberry->intro();
?>


کلمه کلیدی final

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

مثال زیر نحوه جلوگیری از وراثت کلاس را نشان می دهد:

مثال

<?php
final class Fruit {
// some code
}
// will result in error
class Strawberry extends Fruit {
// some code
}
?>

مثال زیر نحوه جلوگیری از غلبه بر روش را نشان می دهد:

مثال

<?php
class Fruit {
final public function intro() {
// some code
  }
}
class Strawberry extends Fruit {
// will result in error
  public function intro() {
// some code
  }
}
?>


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

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟