Question sur les classe PHP

Fermé
nickleus Messages postés 374 Date d'inscription dimanche 20 janvier 2008 Statut Membre Dernière intervention 18 juin 2011 - 11 juin 2009 à 12:13
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 - 11 juin 2009 à 14:42
Bonjour à tous,

Il arrive de temps en temps que je vois ceci dans de code de class :

class ma_class
{
funtion test (autre_class $request )
{
// code
}
}

Est ce que quelqu'un serait m'expliquer à quoi cela pourrait servir ?

merci beaucoup d'avance.

7 réponses

Xil Messages postés 350 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 11 juin 2009 257
11 juin 2009 à 12:38
Bonjour,

C'est un cast sur le fait que le paramètre fourni lors de l'appel de la fonction test doit être un objet de la classe 'autre_classe'.
Tout comme on aurait pu mettre int, float, string,...
0
nickleus Messages postés 374 Date d'inscription dimanche 20 janvier 2008 Statut Membre Dernière intervention 18 juin 2011 5
11 juin 2009 à 12:58
Ok c'est déjà plus claire. Merci.

Ça pourrais par exemple permettre de faire fonctionner un objet passé en paramètre suivant une interface. C'est ça ?

Et ainsi test si l'objet utilise bien toutes mes méthode ?

0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
11 juin 2009 à 13:28
salut,

Ça pourrais par exemple permettre de faire fonctionner un objet passé en paramètre suivant une interface. C'est ça ?
qu'est-ce que tu veux dire ?

la méthode "test" de ta classe "ma_classe" n'admet comme paramètre qu'un objet du type "autre_class".

ça te permet d'être sûr de la variable que tu reçois à l'appelle de la méthode.

part exemple si je crée une classe qui traite des exceptions pour les afficher :
<?php
class classe_qui_affiche_l_erreur
{
	public function affiche($e)
	{
		echo $e->getMessage(); // l'erreur sera levée ici
	}
}
// si tu fais :
$obj = new classe_qui_affiche_l_erreur();
$param = array();
$obj->affiche($param);
?>

si tu appelles la méthode de la première classe en lui passant autre chose qu'une exception, tu auras une erreur car la variable en paramètre n'aura pas de méthode "getMessage()".
<code><?php
class classe_qui_affiche_l_erreur_avec_type
{
	public function affiche(Exception $e)
	{
		echo $e->getMessage();
	}
}
// si tu fais :
$obj = new classe_qui_affiche_l_erreur_avec_type();
$param = array();
$obj->affiche($param); // l'erreur sera levée ici
?>
</code>
avec la deuxième classe, tu auras aussi une erreur car tu donnes un paramètre incorrect mais l'erreur sera levée à l'extérieur de ta classe et tu es sûr que ta fonction ne sera pas exécutée, même partiellement.
0
nickleus Messages postés 374 Date d'inscription dimanche 20 janvier 2008 Statut Membre Dernière intervention 18 juin 2011 5
11 juin 2009 à 13:50
Ça pourrais par exemple permettre de faire fonctionner un objet passé en paramètre suivant une interface. C'est ça ?
qu'est-ce que tu veux dire ?


Voila un petit code que j'ai fait en croyant que c'était puisqu'il fonctionne car un exemple va meiux représenté ce que je voulais dire :


interface Core_Inter
{
	public function bibi ( );
}


class Core_Test1
{
	public function testing ( Core_Inter $p )
	{
		$p->bibi ( );
	}
}


class Core_Test2 implements Core_Inter
{
	public function bibi ( )
	{
		echo 'bibi';
	}
}


$class = new Core_Test2;

$class2 =  new Core_Test1;
$class2->testing ( $class );


Est ce que tu vois ce que je veux dire ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
11 juin 2009 à 14:27
ah !

et ça fonctionne ?

je pense qu'il faut plutôt hérité d'une de la classe "Core_Inter" que d'implémenter l'interface.
il teste le type et ta "Core_Test2" doit toujours être du type "objet standard" et pas du type "Core_Inter".
0
nickleus Messages postés 374 Date d'inscription dimanche 20 janvier 2008 Statut Membre Dernière intervention 18 juin 2011 5
11 juin 2009 à 14:31
Oui en faite je pense que c'est un coup de bol si ça fonctionne.
Quoi que ... en lisant un tuto sur le design pattern observateurs ( car je suis entrain d'essayer de comprend), il font appel appel à l'interface.

Voila le lien :

http://julien-pauli.developpez.com/tutoriels/php/observer-spl/

tu vois ?
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
11 juin 2009 à 14:42
non tu as raison ça fonctionne avec une interface !
0