Maison  >  Article  >  développement back-end  >  Tutoriel d'apprentissage avancé sur les classes abstraites PHP, les interfaces, les constantes finales et de classe

Tutoriel d'apprentissage avancé sur les classes abstraites PHP, les interfaces, les constantes finales et de classe

伊谢尔伦
伊谢尔伦original
2017-06-29 09:22:481036parcourir

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

L'héritage PHP est un héritage unique, c'est-à-dire qu'une classe ne peut hériter que d'une seule classe parent, ce qui a un certain impact sur l'expansion des fonctions de sous-classe. L'implémentation d'interfaces peut être considérée comme un complément aux classes héritées. L'héritage est une relation hiérarchique et n'est pas très flexible, tandis que l'implémentation d'interfaces est une relation horizontale. L'implémentation d'interfaces peut étendre une certaine fonction sans rompre la relation d'héritage, qui est très flexible.



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 :

3. Final ne peut pas être utilisé pour modifier des attributs
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 :

Remarque :
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!

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