À l'aide d'une interface, vous pouvez spécifier quelles méthodes une classe doit implémenter, mais vous n'avez pas besoin de définir eux Le contenu spécifique de la méthode. Une interface est définie via le mot-clé interface, tout comme la définition d'une classe standard, mais toutes les méthodes qui y sont définies sont vides. Toutes les méthodes définies dans une interface doivent être publiques. C'est une caractéristique des interfaces.
Pour implémenter une interface, utilisez l'opérateur impléments. La classe doit implémenter toutes les méthodes définies dans l'interface, sinon une erreur fatale sera signalée. Une classe peut implémenter plusieurs interfaces. Utilisez des virgules pour séparer les noms de plusieurs interfaces.
note1 : Lors de l'implémentation de plusieurs interfaces, les méthodes des interfaces ne peuvent pas avoir le même nom.
note2 : Les interfaces peuvent également être héritées, en utilisant l'opérateur extends.
L'héritage est une fonctionnalité de programmation bien connue, et le modèle objet de PHP utilise également l'héritage. L'héritage affectera la relation entre les classes et les objets, ainsi qu'entre les objets. Par exemple, lors de l'extension d'une classe, la sous-classe hérite de toutes les méthodes publiques et protégées de la classe parent. À moins que la sous-classe ne remplace la méthode de la classe parent, la méthode héritée conservera sa fonctionnalité d'origine. L'héritage est très utile pour la conception fonctionnelle et l'abstraction, et l'ajout de nouvelles fonctions à des objets similaires élimine le besoin de réécrire ces fonctions communes.
note3 : Sauf si le chargement automatique est utilisé, une classe doit être définie avant utilisation. Si une classe en étend une autre, la classe parent doit être déclarée avant la classe enfant. Cette règle s'applique aux classes héritant d'autres classes et interfaces.
note :4 : Pour implémenter une interface, une classe doit utiliser des méthodes qui sont exactement les mêmes que celles définies dans l'interface. Sinon, une erreur fatale en résultera.
Des constantes peuvent également être définies dans l'interface. Les constantes d'interface sont utilisées exactement de la même manière que les constantes de classe, mais elles ne peuvent pas être remplacées par des sous-classes ou des sous-interfaces.
Vous pouvez définir des valeurs qui restent inchangées dans une classe comme constantes. Il n'est pas nécessaire d'utiliser le symbole lors de la définition et de l'utilisation de constantes. La valeur d'une constante doit être une valeur fixe et ne peut pas être une variable, un attribut de classe, le résultat d'une opération mathématique ou un appel de fonction. Les constantes peuvent également être définies dans les interfaces.
Exemple d'interface :
Exemple n°1 Exemple d'interface
<?php // 声明一个'iTemplate'接口 interface iTemplate { public function setVariable($name, $var); public function getHtml($template); } // 实现接口 // 下面的写法是正确的 class Template implements iTemplate { private $vars = array(); public function setVariable($name, $var) { $this->vars[$name] = $var; } public function getHtml($template) { foreach($this->vars as $name => $value) { $template = str_replace('{' . $name . '}', $value, $template); } return $template; } } // 下面的写法是错误的,会报错,因为没有实现 getHtml(): // Fatal error: Class BadTemplate contains 1 abstract methods // and must therefore be declared abstract (iTemplate::getHtml) class BadTemplate implements iTemplate { private $vars = array(); public function setVariable($name, $var) { $this->vars[$name] = $var; } } ?>
Exemple n°2 Interface extensible
<?php interface a { public function foo(); } interface b extends a { public function baz(Baz $baz); } // 正确写法 class c implements b { public function foo() { } public function baz(Baz $baz) { } } // 错误写法会导致一个致命错误 class d implements b { public function foo() { } public function baz(Foo $foo) { } } ?>
Exemple n°3 Hériter de plusieurs interfaces
<?php interface a { public function foo(); } interface b { public function bar(); } interface c extends a, b { public function baz(); } class d implements c { public function foo() { } public function bar() { } public function baz() { } } ?>
Exemple n°4 Utilisation de constantes d'interface
<?php interface a { const b = 'Interface constant'; } // 输出接口常量 echo a::b; // 错误写法,因为常量不能被覆盖。接口常量的概念和类常量是一样的。 class b implements a { const b = 'Class constant'; } ?>
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!