Question sur les classe PHP

nickleus Messages postés 374 Date d'inscription   Statut Membre Dernière intervention   -  
Dalida Messages postés 6728 Date d'inscription   Statut Contributeur Dernière intervention   -
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.
A voir également:

7 réponses

Xil Messages postés 350 Date d'inscription   Statut Membre Dernière intervention   257
 
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   Statut Membre Dernière intervention   5
 
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   Statut Contributeur Dernière intervention   922
 
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   Statut Membre Dernière intervention   5
 
Ç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   Statut Contributeur Dernière intervention   922
 
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   Statut Membre Dernière intervention   5
 
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   Statut Contributeur Dernière intervention   922
 
non tu as raison ça fonctionne avec une interface !
0