Maison >développement back-end >tutoriel php >Tutoriel d'apprentissage avancé sur les classes abstraites PHP, les interfaces, les constantes finales et de classe
Apprentissage avancé du PHP orienté objet, comprenant principalement quelques informations sur les classes abstraites, les interfaces, les constantes finales et de classe
Classes abstraites (abstrait)
Dans notre processus de développement actuel, certaines classes n'ont pas besoin d'être instanciées. Par exemple, certaines classes parentes apprises précédemment sont principalement héritées par des sous-classes, ce qui peut améliorer la réutilisabilité du code Structure grammaticale :
abstract class 类名{ 属性 $name; 方法(){} //方法也可以为abstract 修饰符 function 方法名(){} }Exemple :
abstract class animal{ public $name; public $age; //抽象方法不能有方法体,主要是为了让子类去实现; abstract public function cry(); // 抽象类 中可以包含抽象方法,同时也可以包含实例类方法 public function getname(){ echo $this->name; } } class Cat{ public function cry(){ echo 'ok'; } }Compréhension : La classe animale est en fait un concept abstrait, qui stipule certains attributs et comportements communs de certains animaux, mais en fait, elle ne possède pas elle-même ces propriétés et ces comportements. Autre exemple : véhicules, plantes, etc. Remarque :
1. Si une classe est modifiée avec abstract, alors la classe est une classe abstraite. Si une méthode est modifiée avec abstract, alors la classe A. method est une méthode abstraite. Une méthode abstraite ne peut pas avoir de méthode body => abstract function cry(); même pas {}
2. Une classe abstraite ne peut pas être instanciée, mais si. Une classe contient n'importe quelle méthode abstraite, et cette classe doit être déclarée comme classe abstraite ;
3. Si une classe hérite d'une autre classe abstraite, la sous-classe doit implémenter toutes les méthodes abstraites de la classe abstraite (sauf si elle est elle-même déclarée comme une classe abstraite). classe abstraite);
2. Interface (interface)
L'interface consiste à encapsuler certaines méthodes non implémentées ensemble Lorsqu'une certaine classe est utilisée, Ensuite, écrivez ces méthodes en fonction de la situation spécifique. ; Structure grammaticale
nom de l'interface de l'interface {
//Attributs, méthodes
//Les méthodes dans l'interface ne peuvent pas avoir de corps de méthode
}
Comment implémenter l'interface
class nom de classe implémente le nom de l'interface {
}
Compréhension : L'interface est une classe abstraite plus abstraite. Les méthodes des classes abstraites peuvent avoir des corps de méthode, mais les méthodes des interfaces ne doivent pas avoir de corps de méthode. Les interfaces réalisent le polymorphisme de la programmation et les idées de conception de cohésion élevée et de faible couplage ;
Exemple :
//接口是定义规范、属性的,一般以小写的i开头; interface iUsb{ public function start(); public function stop(); } //编写相机类,让它去实现接口 //当一个类实现了某个接口,那么该类就必须实现接口的所有方法 class Camera implements iUsb{ public function start(){ echo 'Camera Start Work'; } public function stop(){ echo 'Camera Stop Work'; } } //编写一个手机类 class Phone implements iUsb{ public function start(){ echo 'Phone Satrt Work'; } public function stop(){ echo 'Phone Stop Work'; } } $c=new Camera(); $c->start(); $p=new Phone(); $p->start();Quand utiliser les interfaces :
1. Définir les spécifications, laisser d'autres programmeurs. implémentez-le
2. Lorsque plusieurs classes parallèles doivent implémenter une certaine fonction, mais que les méthodes d'implémentation sont différentes
Résumé :
1 L'interface ne peut pas être utilisée pour l'instanciation, toutes les méthodes de l'interface. ne peut pas avoir de corps ;
2. Une classe peut implémenter plusieurs interfaces, séparées par des virgules (,) la démo de classe implémente if1,if2,if3{}
3. . Les constantes ne peuvent pas avoir de modificateurs (la valeur par défaut est public modifier)
Par exemple : interface iUsb{
const A=90;
echo iUsb::A
4. les méthodes de l'interface doivent être publiques, et la valeur par défaut est publique ;
5. Une interface ne peut pas hériter d'autres classes, mais elle peut hériter de
autres
interfaces. Une interface peut hériter de plusieurs autres interfacesPour. exemple : interface nom de l'interfaceextends
if1,if2{} 6. Une classe peut hériter d'autres interfaces tout en héritant de la classe parentPar exemple : la classe test extends testbase implémente test1, test2{}
Implémentation d'interfaces VS héritage de classes
3. Final
1. Si nous voulons qu'une classe ne soit pas héritée par d'autres classes (par exemple, pour des raisons de sécurité, etc.), alors nous pouvons pensez à utiliser final Syntaxe :
final class A{}
2. Si nous voulons qu'une méthode ne soit pas remplacée par des sous-classes, nous pouvons envisager d'utiliser final pour la modifier. hérité, car la méthode Les droits d'héritage dépendent de modifications publiques
telles que :
class A{ final public function getrate($salary){ return $salary*0.08; } } class B extens A{ //这里父类的getrate方法使用了final,所以这里无法再重写getrate //public function getrate($salary){ // return $salary*0.01; //} }
4. Constantes de classe (const )
Dans certains cas, il peut y avoir une telle exigence : lorsque vous ne souhaitez pas qu'une variable membre soit modifiée et que vous souhaitez que la valeur de la variable soit fixe, vous pouvez utiliser des constantes const ( les noms const doivent être en lettres majuscules, et sans le symbole $, les constantes ne peuvent pas être modifiées) Syntaxe :
const nom de la constante = valeur constante ; //Une valeur initiale doit être attribuée, car les constantes ne peuvent pas être modifiées
Appel :
Nom de la classe ::Nom de la constante [self::le nom de la constante est disponible dans cette classe] ou nom de l'interface ::nom de la constante //Seules les constantes peuvent être utilisées dans l'interface, les variables
ne peuvent pas être utilisées , tels que :
class A{ const TAX_RATE=0.08; function paytax($salary){ return $salary*self::TAX_RATE; } } $a=new A(); echo $a->paytax(100);1 Les constantes peuvent être héritées par les sous-classes
2 Les constantes appartiennent à une certaine classe, pas à un objet
.
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!