8791 sujets

Développement web côté serveur, CMS

Une interface je sais comment ça marche :
On définie des fonctions qui seront indispensable pour les classes implémentant cette interface.
exemple je créer des classes permettant la création de formulaire. j'ai donc

interface Form {
    public function render();
}

render() me renvoie le html

//TEXT & PASSWORD 
class Text extends Input implements Form {

	private $m_type;
	private $m_size;
	public function __construct($p_array) {
		parent::__construct($p_array["name"],$p_array["value"],$p_array["label"],$p_array["id"],$p_array["class"],$p_array["obligatoire"]);
		$this->m_type = $p_array["type"];
		$this->m_size = $p_array["size"];
	}
	public function render() {
		return $this->m_label." <input type=\"".$this->m_type."\" name=\"".$this->m_name."\" value=\"".$this->m_value."\" size=\"".$this->m_size."\"  id=\"".$this->m_id."\" class=\"".$this->m_class."\" />\r\n";
	}

}

Mais à quoi ça sert ?
Modifié par Su4p (09 Feb 2011 - 16:42)
Su4p a écrit :
Mais à quoi ça sert ?

Su4p a écrit :
On définie des fonctions qui seront indispensable pour les classes implémentant cette interface.

Smiley lol

Un exemple qui te permettra d y voir plus clair

Perso, je ne m'en sers pas car ce n'est pas utile au vu des projets sur lesquels je travaille ni de l'équipe de développeurs qui se résume à ma seule personne. Smiley cligne
Modifié par bzh (08 Feb 2011 - 15:38)
Donc si je comprends bien : une interface n'est utile que si l'on est plusieurs à développer sur un même projet pour être sûr que si un dev créer une classe (dans mon exemple select) il n'oublie pas "render". Ou si je reprends mon projet 5 mois plus tard pour ne pas oublier les fondamentaux.

Smiley confused c'est bien ça ?
Grossièrement c'est ça.
C'est un cadre fixé permettant de "normaliser" d'unifier un ensemble de classe.

Ça trouve plus facilement ça place dans de gros projets collaboratifs et où une conception UML a été établie au préalable.
Une autre utilité des interfaces : le processus de décision.
En Java/Swing, implémenter ActionListener rend un composant "sensible" aux actions. Comment ? Parce que Swing vérifie, lors d'une action, si le ou les components sur le ou lesquels l'action a eu lieu implémente ActionListener. Pattern Observer.

Tu peux donc tout à fait utiliser les interface comme élément de différenciation dans le processus de décision. Au lieu d'avoir "as-t'on la classe X ou Y ?", on aurait "cette classe implémente-t'elle i ?", ce qui est bien plus portable, et, ironiquement, moins lourd à écrire Smiley smile
Même en travaillant seul, l’interface a une utilité.
En php, tu ne peux pas faire d’héritage multiple. Pour définir une classe carré tu ne peux pas la faire hériter à la fois de la classe rectangle et de la classe losange. Mais tu contournes le problème en fixant que la classe carré implémentera les interfaces rectangle et losange.