Abstrakti luokka PHP OOP:ssa

A

Tässä artikkelissa opimme abstraktin luokan PHP:llä.

Mikä on abstrakti luokka PHP:ssä?

Abstrakti luokka sisältää menetelmien määrittelyn, mutta ei niiden määritelmää. Se sisältää vain heidän nimensä. Lapsiluokan vastuulla on määritellä nämä menetelmät.

Mikä on abstrakti menetelmä?

Abstrakti menetelmä on abstraktin luokan menetelmä, joka on määritelty abstrakteilla avainsanoilla ja joka ei sisällä runkoa. Sen määrittelee lapsen luokka.

  • abstrakti avainsanaa käytetään ilmoittamaan abstrakti luokka tai menetelmä.
  • Abstraktissa luokassa on oltava vähintään yksi abstrakti menetelmä. Se voi kuitenkin sisältää myös ei-abstrakteja menetelmiä.

Syntaksi

<?php
abstract class ParentClass {
  abstract public function someMethod1();
  abstract public function someMethod2($name, $color);
  abstract public function someMethod3() : string;
}
?>

Mitkä ovat PHP:n abstraktin luokan säännöt?

  • Abstraktissa luokassa on oltava vähintään yksi abstrakti menetelmä. Se voi kuitenkin sisältää myös ei-abstrakteja menetelmiä.
  • Kun lapsi nimeltä perii abstraktin yläluokan, sen on määritettävä samannimisen yläluokan abstraktit menetelmät.
  • Kun määritetään asbtrakteja menetelmiä lapsiluokassa, se tulisi määrittää vähemmän rajoitetulla pääsyn muokkaajalla. Esimerkiksi, jos emoluokka sisältää abstraktin menetelmän, jolla on suojattu pääsyn muokkaaja. Joten kun lapsiluokka määrittelee tämän menetelmän, sen tulisi säilyttää käyttöoikeusmuuttajansa joko suojattu or julkinen. Se ei voi asettaa sitä yksityinen, koska se on rajoitetumpi kuin suojattu.
  • Abstraktin menetelmän määrittävän aliluokan on läpäistävä sama määrä argumentteja kuin on määritelty pääasbtraktiluokan deklarauksessa. Lapiluokalla voi kuitenkin olla muita kuin pakollisia valinnaisia/lisäargumentteja.

Esimerkki abstraktista luokasta PHP:ssä

<?php
// Parent abstract class
abstract class Bike {
  public $name;
  public function __construct($name) {
    $this->name = $name;
  }
  abstract public function introduction() : string;
}

// Child classes defining the parent classes
class Honda extends Bike {
  public function intro() : string {
    return "I am $this->name!";
  }
}

class Suzuki extends Bike {
  public function introduction() : string {
    return "I am $this->name!";
  }
}

// Objects from child classes
$honda = new honda("Honda");
echo $honda->introduction();

$suzuki= new suzuki("Suzuki");
echo $suzuki->introduction();

?>

Selitys yllä olevasta esimerkistä

  • Yllä olevassa esimerkissä luomme abstraktin luokan Pyörä joka sisältää abstraktin menetelmän esittely.
  • Luomme kaksi lapsiluokkaa Honda ja Suzuki joka laajentaa abstraktia luokkaa ja määrittelee johdantomenetelmän.
  • Luomme näiden luokkien objektit ja kutsumme johdantomenetelmää niiden objekteja käyttäen. Käyttöönottomenetelmä toimii vastaavan luokkansa antaman toteutuksen mukaisesti.

Esimerkki abstraktista luokasta, jossa on ylimääräisiä argumentteja menetelmän ohituksessa



<?php
// Parent abstract class
abstract class Bike {
  public $name;
  public function __construct($name) {
    $this->name = $name;
  }
  abstract protected function introduction($model) : string;
}

// Child classes defining the parent classes
class Honda extends Bike {
  public function intro($model) : string {
    return "I am $this->name. My model is $model";
  }
}

class Suzuki extends Bike {
  public function introduction($model, $color=null) : string {
    return "I am $this->name. My model is $model and color is $color";
  }
}

// Objects from child classes
$honda = new honda("Honda");
echo $honda->introduction();

$suzuki= new suzuki("Suzuki");
echo $suzuki->introduction();
?>

Selitys yllä olevasta esimerkistä

  • Yllä olevan esimerkin peruslogiikka on kuten edellisessä esimerkissä. Välitämme kuitenkin lisäargumentin funktiolle johdantomenetelmässä suzuki luokka.
  • Kuten olemme määritelleet säännön aiemmin tässä opetusohjelmassa, aliluokan pääsymuuttajan tulee olla emoluokan abstraktia menetelmää toteutettaessa pienempi kuin pääluokassa tämän menetelmän määrittelyssä määritetty. Joten molemmat aliluokat käyttävät julkisen pääsyn muokkaajaa määrittämään käyttöönottomenetelmän.
  • Yritä määrittää funktio yksityisen pääsyn muokkaajalla, se tuottaa virheen.

Huomautus: Abstrakti luokka ei sisällä konstruktorimetodia. Joten emme voi luoda abstraktin luokan esiintymää.

Luokan abstraktion PHP 8 virallinen dokumentaatio.

lisää kommentti

Tutor-verkosto

Opi PHP pisteestä A paikkaan Z