Maison >développement back-end >tutoriel php >Explication détaillée des exemples de code de classe abstraite php

Explication détaillée des exemples de code de classe abstraite php

伊谢尔伦
伊谢尔伦original
2017-07-03 09:33:081199parcourir

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 à un arbre. Une classe racine a une ou plusieurs sous-classes, puis hérite. une ou plusieurs sous-classes de niveau inférieur de chaque sous-classe.

Bien sûr, il peut y avoir plusieurs classes racine pour implémenter différentes fonctions. Dans un système bien conçu, chaque classe racine doit avoir une interface utile qui peut être. utilisé par le code d'application. Si notre code d'application est conçu pour fonctionner avec la classe racine, alors il peut également fonctionner avec n'importe quelle sous-classe qui hérite de la classe racine

Les méthodes abstraites sont comme des espaces réservés pour les méthodes générales dans les sous-classes. (prend de la place mais ne fonctionne pas). Elles sont différentes des méthodes générales - elles n'ont pas de code. Si une ou plusieurs méthodes abstraites existent dans la classe, alors Cette classe devient une classe abstraite. ne peut pas instancier des classes abstraites. Vous devez en hériter, puis instancier des sous-classes. Vous pouvez également considérer une classe abstraite comme un modèle pour une sous-classe

Si vous remplacez toutes les méthodes abstraites, la sous-classe devient une classe normale. Si vous ne remplacez pas toutes les méthodes, la sous-classe est toujours abstraite. Si une classe contient des méthodes abstraites (même une seule), vous devez déclarer que cette classe est abstraite, ajoutez abstract avant le mot-clé class

La syntaxe. car déclarer des méthodes abstraites est différent de déclarer des méthodes générales. Les méthodes abstraites ne sont pas entourées d'accolades {} comme les méthodes générales, et se terminent par un point-virgule
Dans le fichier programme suivant, nous définissons une classe Shape; qui contient la méthode getArea Cependant, comme il est impossible de déterminer l'aire de la figure sans connaître la forme, nous déclarons en effet que la méthode getArea est 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 Si vous définissez une classe avec uniquement des méthodes abstraites, vous définissez une interface. Pour illustrer cette situation, PHP a l'interface et. implémente des mots-clés. Vous pouvez utiliser interface au lieu d'une classe abstraite et Implements au lieu de extends pour déclarer la définition de votre classe ou utiliser une interface. Par exemple, vous pouvez écrire un myClass implémente myIterface. L'une ou l'autre méthode peut être choisie en fonction. préférence personnelle.

Code

/*注: 
两种方法即指: 
1. abstract class aaa{} (注意aaa中只有抽象方法,没有一般方法) 
class bbb extends aaa{} (在bbb中覆写aaa中的抽象方法) 
2. interface aaa{} 
class bbb implements aaa{} (在bbb中覆写aaa中的抽象方法) 
*/ 
<?php 
//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) print("Area: ".$s->getArea()."<br>\n"); //如果$s是Shape类的实例 
if($s instanceof Polygon) print("Sides: ".$s->getNumberOfSides()."<br>\n"); 
if($s instanceof Color) print("Color:".$s->name."<br>\n"); 
print("<br>\n"); 
} 
?>

Exécuter les résultats :

Area: 35 
Sides: 4 
Area: 10 
Sides: 3 
Area: 28.274333882308 
Color:blue

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