Maison  >  Article  >  développement back-end  >  Tutoriel de base sur les méthodes abstraites et les classes abstraites du modèle objet PHP

Tutoriel de base sur les méthodes abstraites et les classes abstraites du modèle objet PHP

伊谢尔伦
伊谢尔伦original
2017-07-03 09:21:461192parcourir

 Orienté objet Les programmes sont construits via une structure hiérarchique de classes. Dans les langages à héritage unique tels que PHP, l'héritage de classe ressemble à une arborescence. puis hérite d'une ou plusieurs sous-classes. Bien entendu, plusieurs classes racine peuvent être utilisées pour implémenter différentes fonctions. Dans un système bien conçu, chaque classe racine doit avoir une interface utile pouvant être utilisée par le code d’application. Si notre code d’application est conçu pour fonctionner avec la classe racine, il peut également fonctionner avec n’importe quelle sous-classe héritant de la classe racine.

Une méthode abstraite est un espace réservé tout comme une méthode normale dans une sous-classe (elle prend une place mais ne fonctionne pas). Elle est différente d'une méthode normale - elle n'a pas de code. S'il y a une ou plusieurs méthodes abstraites dans une classe, alors la classe devient une classe abstraite. Vous ne pouvez pas instancier des classes abstraites. Vous devez en hériter, puis instancier des sous-classes. Vous pouvez également considérer les classes abstraites comme un modèle pour les sous-classes.

Si vous remplacez toutes les méthodes abstraites, la sous-classe devient une classe normale. Si toutes les méthodes ne sont pas remplacées, la sous-classe est toujours abstraite. Si une classe contient une méthode abstraite (même s'il n'y en a qu'une), vous devez déclarer la classe comme abstraite en ajoutant abstract avant le mot-clé class.

La syntaxe de déclaration d'une méthode abstraite est différente de celle de déclaration d'une méthode générale. La méthode abstraite n'a pas de corps principal contenu entre accolades {} comme une méthode générale, et se termine par un point-virgule ;.

Dans l'exemple 6.13, nous définissons une classe Shape qui contient la méthode getArea. Mais comme il est impossible de déterminer l'aire d'une figure sans connaître la forme, nous avons déclaré la méthode getArea comme méthode abstraite. Vous ne pouvez pas instancier un objet Shape, mais vous pouvez en hériter ou l'utiliser dans une expression , comme dans l'exemple 6.13.

Si vous créez une classe avec uniquement des méthodes abstraites, vous définissez une interface. Pour illustrer cette situation, PHP possède l'interface et implémente des mots-clés. Vous pouvez utiliser une interface au lieu d'une classe abstraite et implémenter au lieu de extends pour décrire la définition de votre classe ou utiliser une interface. Par exemple, vous pouvez écrire un myClass implémente myIterface. Ces deux méthodes peuvent être utilisées selon vos préférences personnelles. . choisir.

/*Remarque :
Les deux méthodes font référence à :
1. classe abstraite aaa{} (notez qu'il n'y a que des méthodes abstraites dans aaa, pas de méthodes générales)
la classe bbb extends aaa{} (Remplacer la méthode abstraite dans aaa dans bbb)
2. interface aaa{}
class bbb implémente aaa{} (Remplacer la méthode abstraite dans aaa dans bbb)
*/

Listing 6.13 Classes abstraites

//abstract root class 抽象根类 
abstract class Shape 
{ 
 abstract function getArea(); //定义一个抽象方法 
}
//abstract child class 抽象子类 
abstract class Polygon extends Shape //多边形 
{ 
 abstract function getNumberOfSides(); 
}
//concrete class 实体类 三角形类 
class Triangle extends Polygon 
{ 
 public $base; 
 public $height;
 public function getArea() //覆写计算面积方法 
 { 
  return(($this->base * $this->height)/2); 
 }
 public function getNumberOfSides() //覆写边数统计方法 
 { 
  return(3); 
 } 
}
//concrete class 实体类四边形 
class Rectangle extends Polygon 
{ 
 public $width; 
 public $height;
 public function getArea() 
 { 
  return($this->width * $this->height); 
 }
 public function getNumberOfSides() 
 { 
  return(4); 
 } 
}
//concrete class 实体类 圆形 
class Circle extends Shape 
{ 
 public $radius;
 public function getArea() 
 { 
  return(pi() * $this->radius * $this->radius); 
 } 
}
//concrete root class 定义一个颜色类 
class Color 
{ 
 public $name; 
}
$myCollection = array(); //建立形状的集合,放入数组
//make a rectangle 
$r = new Rectangle; 
$r->width = 5; 
$r->height = 7; 
$myCollection[] = $r; 
unset($r);
//make a triangle 
$t = new Triangle; 
$t->base = 4; 
$t->height = 5; 
$myCollection[] = $t; 
unset($t);
//make a circle 
$c = new Circle; 
$c->radius = 3; 
$myCollection[] = $c; 
unset($c);
//make a color 
$c = new Color; 
$c->name = "blue"; 
$myCollection[] = $c; 
unset($c);
foreach($myCollection as $s) 
{ 
 if($s instanceof Shape) //如果$s是Shape类的实例 
 { 
  print("Area: " . $s->getArea() . "n"); 
 }
 if($s instanceof Polygon) 
 { 
  print("Sides: " .$s->getNumberOfSides()."n"); 
 }
 if($s instanceof Color) 
 { 
  print("Color: $s->name n"); 
 }
 print("n"); 
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn