پی ایچ پی او او پی میں وراثت

I

وراثت کیا ہے؟

جب ایک طبقہ دوسرے طبقے سے اخذ کرتا ہے، تو اسے وراثت کے نام سے جانا جاتا ہے۔ پی ایچ پی میں وراثت سے متعلق کچھ اہم اصطلاحات یہ ہیں۔

  • پیرنٹ کلاس - جس طبقے سے دوسری کلاسیں اخذ کی جاتی ہیں اسے پیرنٹ کلاس کہتے ہیں۔ اسے بیس کلاس بھی کہا جاتا ہے۔
  • چائلڈ کلاس - دوسری کلاس سے اخذ کردہ کلاس کو چائلڈ کلاس کہتے ہیں۔ اس کے کچھ اور نام بھی ہیں جیسے لیف کلاس یا اخذ شدہ کلاس۔
پی ایچ پی میں وراثت

پی ایچ پی میں کلاس کو وراثت میں کیسے لیا جائے؟

ایک کلاس کو استعمال کرکے وراثت میں مل سکتا ہے۔ توسیع کلیدی لفظ مندرجہ ذیل مثال کو دیکھیں۔

<?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}.";
  }
}

// Apple is inherited from Fruit
class Apple extends Fruit {
  public function message() {
    echo "I am from Fruit class or Apple one? ";
  }
}
$apple= new Apple("Apple", "red");
$apple->message();
$apple->intro();
?>

اوپر کی مثال میں

  • ہم کچھ خصوصیات اور طریقوں کے ساتھ ایک بیس یا پیرنٹ کلاس فروٹ بناتے ہیں۔
  • ہم ایک اور کلاس ایپل بناتے ہیں جو ایکسٹینڈس کی ورڈ کا استعمال کرتے ہوئے پیرنٹ کلاس Fruit کو توسیع/وراثت دیتا ہے۔
  • ایپل مثال/آبجیکٹ بنائیں اور وراثت کا استعمال کرتے ہوئے فروٹ کلاس طریقہ تک رسائی حاصل کریں۔

پی ایچ پی میں وراثت کے تعارف کو سمیٹتے ہوئے، ہم آپ کے لیے درج ذیل نکات جمع کرتے ہیں۔

  1. وراثت چائلڈ کلاس کو عوامی __تعمیر، طریقوں اور پیرنٹ کلاس کی خصوصیات تک رسائی کی اجازت دیتی ہے۔
  2. مندرجہ بالا مثال میں، ہم ایپل کلاس کے طریقہ کار کو اس کے آبجیکٹ کے ساتھ ساتھ پیرنٹ کلاس کے طریقوں تک رسائی حاصل کر سکتے ہیں۔

وراثت میں محفوظ رسائی میں ترمیم کرنے والوں کا دائرہ

پچھلے ٹیوٹوریل میں، ہم نے سیکھا کہ کلاس کے محفوظ صفات/طریقے کلاس اور اس سے اخذ کردہ کلاسز کے اندر قابل رسائی ہیں۔

وراثت میں محفوظ رسائی میں ترمیم کرنے والوں کے دائرہ کار کو سمجھنے کے لیے، آئیے پہلے درج ذیل مثال کو دیکھیں۔

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "I am $this->name and my color is $this->color";
  }
}

class Apple extends Fruit {
  public function message() {
    echo "I am from Fruit class or Apple one?";
  }
}

$apple = new Apple("Apple", "red");
$apple->message();
$apple->intro();
?>

مندرجہ بالا مثال میں:

  • ہم کچھ عوامی صفات اور ایک محفوظ طریقہ کے ساتھ ایک کلاس فروٹ بناتے ہیں۔
  • ہم ایک اور کلاس ایپل بناتے ہیں، فروٹ کلاس سے پھیلا ہوا ہے اور اس کی مثال بناتے ہیں۔
  • جب ہم ایپل کلاس آبجیکٹ کا استعمال کرتے ہوئے فروٹ کلاس کے محفوظ طریقہ تک رسائی حاصل کرنے کی کوشش کرتے ہیں تو اس سے غلطی ہوتی ہے کیونکہ، ہم اخذ کردہ کلاس سے باہر فروٹ کلاس کے محفوظ ممبر تک رسائی حاصل کرنے کی کوشش کر رہے ہیں۔

آئیے ایک اور مثال کی طرف چلتے ہیں، جو درحقیقت اوپر دی گئی مثال میں تھوڑی سی ترمیم کی گئی ہے۔

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "I am {$this->name} and my color is {$this->color}.";
  }
}

class Apple extends Fruit {
  public function message() {
    echo "Am I a fruit or an apple? ";
    $this -> intro(); // protected
  }
}

$apple = new Apple("Apple", "red");
$strawberry->message();
?>

اوپر کی مثال میں، فروٹ کلاس کا محفوظ طریقہ ایپل کلاس میں قابل رسائی ہے کیونکہ ہم اس تک کلاس کے اندر ہی رسائی حاصل کر رہے ہیں۔

وراثت میں اوور رائیڈنگ

اوور رائیڈنگ اسی نام کا استعمال کرتے ہوئے، بچوں کی کلاسوں میں پیرنٹ کلاس کے طریقوں کی دوبارہ وضاحت کرنے سے مراد ہے۔ ذیل میں وراثت میں اوور رائیڈنگ کی مندرجہ ذیل مثال کو دیکھیں۔

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "I am {$this->name} and my color is {$this->color}.";
  }
}

class Apple extends Fruit {
  public $weight;
  public function __construct($name, $color, $weight) {
    $this->name = $name;
    $this->color = $color;
    $this->weight = $weight;
  }
  public function intro() {
    echo "I am {$this->name}, my color is {$this->color}. Also, my weight is {$this->weight} kg.";
  }
}

$apple= new Apple("Apple", "red", 50);
$apple->intro();
?>

مندرجہ بالا مثال میں:

  • ہم ایک پیرنٹ کلاس فروٹ اور ایک چائلڈ کلاس ایپل بناتے ہیں جو فروٹ کلاس کو بڑھاتا ہے اور اس میں __کنٹریکٹ اور تعارف کے طریقوں کو دوبارہ بیان کرتا ہے۔
  • نوٹ کریں کہ چائلڈ کلاس ایپل اسی نام کے ساتھ __construct اور intro طریقوں کی وضاحت کرتا ہے۔ تاہم، پیرامیٹرز مختلف ہو سکتے ہیں.
  • ہم ایپل کلاس انٹینس بناتے ہیں اور پیرامیٹرز کو کنسٹرکٹ فنکشن میں منتقل کرتے ہیں۔
  • جب ہم ایپل انسٹینس کا استعمال کرتے ہوئے انٹرو میتھڈ کو کال کرتے ہیں تو اسے ایپل کلاس کا انٹرو میتھڈ کہا جاتا ہے کیونکہ ہم نے ایپل کلاس کنسٹرکٹر کا استعمال کرتے ہوئے ایپل آبجیکٹ کی مثال بنائی تھی۔

وراثت میں حتمی مطلوبہ الفاظ کا کردار

۔ فائنل کلیدی لفظ بچے/ماخوذ کلاس کو والدین/بیس کلاس کے طریقہ کار کو اوور رائیڈ کرنے سے روکتا ہے۔ فائنل کلیدی لفظ کے استعمال کو سمجھنے کے لیے درج ذیل مثال کو دیکھیں۔

<?php
class Fruit {
  final public function intro() {
    // code
  }
}

class Apple extends Fruit {
// error to override the intro
  public function intro() {
    // code
  }
}
?>

مندرجہ بالا مثال میں، ایپل کلاس انٹرو طریقہ کو اوور رائڈ کرنے کی کوشش کرتا ہے۔ یہ ایک غلطی دے گا کیونکہ ہم نے Fruit کلاس کے تعارفی طریقہ کے ساتھ حتمی مطلوبہ لفظ استعمال کیا ہے۔

اہلکار کے لیے کلک کریں۔ پی ایچ پی کی وراثت کا حوالہ۔

نتیجہ

وراثت نہ صرف پی ایچ پی میں او او پی کا ایک اہم تصور ہے بلکہ کسی بھی زبان میں یہ ایک اہم کردار ادا کرتا ہے۔ انٹرویو کے نقطہ نظر سے، وراثت کے سوالات بہت اہم ہیں۔ لہذا، آپ کو اپنے طور پر وراثت پر عمل کرنا چاہئے۔

تبصرہ شامل کریں

ٹیوٹر نیٹ ورک

A سے Z تک PHP سیکھیں۔