Clasa abstractă în PHP OOP

A

În acest articol, vom învăța o clasă abstractă în PHP.

Ce este o clasă abstractă în PHP?

O clasă abstractă conține declarația metodelor, dar nu și definiția acestora. Conține doar numele lor. Este responsabilitatea clasei copil să definească aceste metode.

Ce este o metodă abstractă?

O metodă abstractă este o metodă a unei clase abstracte care este declarată folosind cuvinte cheie abstracte și nu conține corpul. Este definit de clasa copilului.

  • abstract cuvântul cheie este folosit pentru a declara o clasă sau o metodă abstractă.
  • O clasă abstractă trebuie să conțină cel puțin o metodă abstractă. Cu toate acestea, poate conține și metode non-abstracte.

Sintaxă

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

Care sunt regulile clasei abstracte în PHP?

  • O clasă abstractă trebuie să conțină cel puțin o metodă abstractă. Cu toate acestea, poate conține și metode non-abstracte.
  • Când un copil numit moștenește clasa părinte abstractă, acesta trebuie să definească metodele abstracte ale clasei părinte cu același nume.
  • În timp ce se definesc metodele asbtract în clasa copil, aceasta ar trebui să fie definită cu un modificator de acces mai puțin restricționat. De exemplu, dacă clasa părinte conține metoda abstractă având protejat modificator de acces. Deci, atunci când clasa copil definește această metodă, ar trebui să-și păstreze modificatorul de acces ca oricare protejat or public. Nu se poate seta la privat, pentru că este mai restrâns decât cel protejat.
  • Clasa copil care definește metoda abstractă trebuie să treacă un număr egal de argumente așa cum este specificat în declarația din clasa părinte asbtract. Totuși, clasa copil poate avea alte argumente opționale/extra decât cele necesare.

Exemplu de clasă Abstract în PHP

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

?>

Explicația exemplului de mai sus

  • În exemplul de mai sus, creăm o clasă abstractă bicicletă care conține o metodă abstractă introducere.
  • Creăm două clase de copii Honda și Suzuki care extinde clasa abstractă și definește metoda introducerii.
  • Creăm obiectele acestor clase și apelăm metoda introducerii folosind obiectele lor. Metoda introducerii funcționează conform implementării date de clasa corespunzătoare.

Exemplu de clasă abstractă cu argumente suplimentare în suprascrierea metodei



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

Explicația exemplului de mai sus

  • Logica de bază a exemplului de mai sus este ca exemplul anterior. Cu toate acestea, trecem un argument suplimentar funcției în metoda de introducere a suzuki clasă.
  • După cum am definit regula mai devreme în acest tutorial, modificatorul de acces al clasei copil în timpul implementării metodei abstracte a clasei părinte trebuie să fie mai mic decât cel specificat în clasa părinte pentru declararea acestei metode. Deci, ambele clase copil folosesc modificatorul de acces public pentru a defini metoda de introducere.
  • Încercați să definiți funcția cu modificatorul de acces privat, va produce o eroare.

Notă: Clasa abstractă nu conține nicio metodă de constructor. Deci, nu putem crea instanța unei clase abstracte.

Abstracția clasei PHP 8 documentație oficială.

Adaugă comentariu

Rețeaua de tutori

Învață PHP de la A la Z