Arv i PHP OOP

I

Vad är arv?

När en klass härstammar från en annan klass kallas det arv. Här är några viktiga termer relaterade till arv i PHP.

  • Föräldraklass – Klassen som de andra klasserna härrör från kallas förälderklass. Det är också känt som basklass.
  • Barnklass – Den klass som kommer från en annan klass kallas barnklass. Det finns några andra namn för det också som lövklass eller härledd klass.
Arv i PHP

Hur ärver man en klass i PHP?

En klass kan ärvas genom att använda sträcker nyckelord. Titta på följande exempel.

<?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();
?>

I exemplet ovan

  • Vi skapar en bas eller föräldraklass Frukt med några egenskaper och metoder.
  • Vi skapar ytterligare ett klassäpple som utökar/ärver föräldraklassen Fruit med hjälp av sökordet extends.
  • Skapa apple-instans/objekt och få tillgång till fruktklassmetoden med hjälp av arvet.

När vi avslutar introduktionen till arv i PHP, samlar vi följande punkter åt dig.

  1. Arv tillåter den underordnade klassen att komma åt den offentliga __konstruktionen, metoderna och egenskaperna för den överordnade klassen.
  2. I exemplet ovan kan vi komma åt metoden för apple-klassen med hjälp av dess objekt, såväl som metoderna för överordnad klass.

Omfattning av skyddade åtkomstmodifierare i arv

I den tidigare handledningen lärde vi oss att skyddade attribut/metoder för en klass är tillgängliga inom klassen och de klasser som härrör från den.

För att förstå omfattningen av modifierare för skyddad åtkomst i arv, låt oss först titta på följande exempel.

<?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();
?>

I exemplet ovan:

  • Vi skapar en klassfrukt med några offentliga attribut och en skyddad metod.
  • Vi skapar en annan klass äpple, sträcker sig från Fruit klass och skapar dess instans.
  • När vi försöker komma åt den skyddade metoden för Fruite-klassen med apple class-objekt, ger det ett fel eftersom vi försöker komma åt skyddad medlem av Fruit-klassen utanför den härledda klassen.

Låt oss gå till ett annat exempel, som faktiskt är lite modifierat av exemplet ovan.

<?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();
?>

I exemplet ovan är den skyddade metoden för Fruit-klassen tillgänglig i apple-klassen eftersom vi använder den inom klassen.

Åsidosättande i arv

tvingande hänvisar till att omdefiniera metoderna för den överordnade klassen i de underordnade klasserna, med samma namn. Titta på följande exempel på åsidosättande av arv nedan.

<?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();
?>

I exemplet ovan:

  • Vi skapar en föräldraklass Fruit och ett barnklassäpple som utökar Fruit-klassen och omdefinierar __konstruktions- och intrometoderna i den.
  • Observera att barnklassen apple definierar metoderna __construct och intro med samma namn. Men parametrarna kan vara olika.
  • Vi skapar apple-klassförekomster och skickar parametrarna till konstruktionsfunktionen.
  • När vi anropar intrometoden med apple-instans, anropar den intrometoden för apple-klassen eftersom vi skapade instansen av apple-objektet med apple-klasskonstruktorn.

Det slutliga nyckelordets roll i arv

Du har nu möjlighet slutlig nyckelordet förhindrar den underordnade/den härledda klassen från att åsidosätta metoden för den överordnade/basklassen. Titta på följande exempel för att förstå användningen av nyckelordet Final.

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

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

I exemplet ovan försöker apple-klassen åsidosätta intrometoden. Det kommer att ge ett fel eftersom vi har använt det sista nyckelordet med intrometoden för klassen Fruit.

Klicka för en tjänsteman referens till PHP-arvet.

Slutsatser

Arv är inte bara ett viktigt begrepp för OOP i PHP, men på alla språk spelar det en viktig roll. Ur intervjuperspektivet är arvsfrågor mycket viktiga. Så du måste öva på arvet på egen hand.

Lägg till kommentar

Lärarnätverk

Lär dig PHP från A till Ö