Les exemples de cet article résument les points de connaissances pertinents de la classe PHP. Partagez-le avec tout le monde pour votre référence, comme suit :
Classe finale et méthode finale
Si une méthode de la classe parent est déclarée finale, la sous-classe ne peut pas remplacer la méthode. Si une classe est déclarée finale, elle ne peut pas être héritée.
final class a{} class a{ final public function A(){} }
Classe abstraite et méthode abstraite
abstract class a { public abstract function func(); } class A extends a{ public function func(){} }
① Une classe Vous pouvez utiliser abstract pour déclarer une classe abstraite ; une classe abstraite est une classe qui ne peut pas être instanciée et qui est uniquement utilisée comme classe parent pour d'autres classes.
abstract class name{}
② Une méthode peut être déclarée comme méthode abstraite en utilisant des méthodes abstraites qui doivent uniquement déclarer l'en-tête de la méthode et n'ont pas besoin du corps de la méthode ; entre accolades.
abstract public function name($val);
③ S'il existe une méthode abstraite dans une classe, la classe doit être déclarée comme classe abstraite.
④ Si une sous-classe hérite d'une classe abstraite, la sous-classe ne peut pas implémenter toutes les méthodes abstraites de la classe parent à moins que la sous-classe continue également d'être une classe abstraite.
⑤ Lorsqu'une sous-classe implémente une méthode d'une classe parent abstraite, la portée du contrôle d'accès ne peut pas être réduite et les paramètres de la méthode doivent également être cohérents (réécrits).
Interface
L'interface peut être considérée comme une abstraction de niveau supérieur de la classe abstraite, on peut dire qu'elle est un cas particulier de la classe abstraite
interface a{ function func(); } class A implements a { function func(){} }
Classe : attributs, constantes de classe, méthodes
Classe abstraite : attributs, constantes de classe, méthodes abstraites
Interface : constantes d'interface, méthodes abstraites
① Par rapport aux classes abstraites, les interfaces peuvent implémenter un « héritage multiple »
class A implements a,b,c{}
② Une interface ne peut hériter que d'une seule interface
interface a extends b{}
③ Les méthodes sont toutes des méthodes abstraites sans modification abstraite, c'est-à-dire que les classes de niveau inférieur implémentent les méthodes d'interface (impléments) ou sont également déclarées comme méthodes abstraites
Technologie de surcharge
1. Surcharge d'attributs : Si vous utilisez un attribut inexistant, une méthode prédéfinie dans la classe sera appelée pour traiter les données
Pour les scénarios d'application ; là où l'attribut n'est pas utilisé, effectuez ce qui suit Traitement
① Valeur : Appelez automatiquement __get()
② dans la classe Affectation : Appelez automatiquement __set()
③ dans la classe Déterminez s'il existe : Appeler automatiquement __isset dans la classe ()
④ Destruction : Appeler automatiquement __unset() dans la classe
Le principe est que ces méthodes sont prédéfinies, sinon une erreur sera signalée
<?php class bee{ public $ol = array(); public function __get($key){ if(isset($this->ol[$key])){ return $this->ol[$key]; } return $key.' not exists'; } public function __set($key,$val){ $this->ol[$key] = $val; } public function __isset($key){ if(isset($this->ol[$key])){ return true; } return false; } public function __unset($key){ unset($this->ol[$key]); } } $obj = new bee(); echo $obj->one; echo '<br>'; $obj->one = 1; echo $obj->one; echo '<br>'; var_dump(isset($obj->one));
Les résultats d'exécution sont les suivants :
one not exists 1 boolean true
2. Surcharge de méthode : Si une méthode inexistante est utilisée, la méthode prédéfinie dans la classe sera appelée. Une méthode définie est utilisée pour gérer ce comportement
Pour les scénarios d'application où la méthode n'est pas utilisée, effectuez le traitement suivant<🎜 ; >
① Appel de méthodes inaccessibles dans l'objet : __call()② Appel de méthodes inaccessibles en mode statique : __callStatic()
<?php class bee{ public function __call($name,$arr){ echo '<br>'; echo 'function '.$name.' not exist'; } static function __callStatic($name,$arr){ echo '<br>'; echo 'function '.$name.' not exist'; } /*public function __call($name,$arr){ $num = count($arr); if($num<1){ $name(); }else{ $name = $name.'_one'; $name($arr[0]); } }*/ } $obj->func(); bee::staFunc(); /*$obj->func(1); function func(){ echo '<br>'; echo 'no.0'; } function func_one($val){ echo '<br>'; echo 'no.'.$val; }*/
function func not exist function staFunc not exist