Maison >développement back-end >tutoriel php >Analyse d'un exemple de code : quelle est la différence entre l'interface PHP et la classe abstraite ?

Analyse d'un exemple de code : quelle est la différence entre l'interface PHP et la classe abstraite ?

伊谢尔伦
伊谢尔伦original
2017-07-03 09:31:281233parcourir

Cet article est une analyse détaillée et une introduction à la différence entre Interface et Classe abstraite en PHP. Les amis dans le besoin peuvent se référer à

Interface et classe abstraite. C'est vraiment difficile de les distinguer. Elles sont très similaires. Les méthodes n'ont pas de logique définie. Elles sont toutes destinées aux sous-classes à vouloir ou à hériter. Pour faire la distinction entre les deux, rappelez-vous simplement une phrase : L'interface est la spécification et la classe est l'implémentation. Le but de l'interface est de définir un cahier des charges que tout le monde suit.

En d’autres termes, les interfaces et les classes abstraites peuvent être clairement distinguées les unes des autres en termes de finalité. Il y a donc toujours une question, puisqu'il y a une excuse, pourquoi y a-t-il encore une classe abstraite ?

Rejoignez-nous pour définir une classe nommée Animal, qui comporte deux sous-ensembles Dog et Cattle, qui ont tous deux deux méthodes : la méthode run() et la méthode speak().

Supposons que le « run » de Dog et Cattle est le même, donc la méthode run() a la même logique métier et le « speak » est différent, donc la logique métier de la méthode speak() ; La logique est différente. De plus, il existe une interface IAnimal qui stipule que ces deux méthodes doivent être présentes, ce qui signifie que la classe Animal doit implémenter ces deux méthodes. De même, les deux sous-classes Dog et Cattle doivent également avoir ces deux méthodes, alors on peut la définir comme. ceci :

Le code est le suivant :

<?php
interface IAnimal{
 public function run();
 public function speak();
}
class Animal implements IAnimal{
 public function run(){
  //在这里可以添加一些相同的run逻辑
  
return
 "same run<br />";
 }
 public function speak(){
  //这里可以添加一些相同的speak逻辑
  return "same speak<br />";
 }
}
class Dog 
extends
 Animal{
 public function speak(){
  //在这里可以添加一些Dog逻辑
  return "Dog speak<br />";
 }
}
class Cattle extends Animal{
 public function speak(){
  //在这里可以添加一些Cattle逻辑
  return "Cattle speak<br />";
 }
}
$oDog=new Dog();
echo($oDog->run());
echo($oDog->speak());
$oCattle=new Cattle();
echo($oCattle->run());
echo($oCattle->speak());
?>

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