Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2012, 09h52   #1
Membre confirmé
 
Inscription : décembre 2006
Messages : 307
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 307
Points : 226
Points : 226
Par défaut [POO] Interface pour une variable

Bonjour,

Je travaille sur un projet sur lequel j'utilise les interfaces PHP (par un GUI, ça : http://php.net/manual/fr/language.oop5.interfaces.php ).

Cela me permet de rendre obligatoire les méthodes indispensables au fonctionnement du script quand on développe les classes qui en découlent.

Je voudrais faire la même chose pour une variable (tableau ou objet peut importe, je m'adapterai).
Par exemple, il faudrait que je définisse un tableau du type :

$voiture['moteur'] = XXXX (obligatoire)
$voiture['pannes'] = YYYY (facultatif)

Et que PHP lève une exception si la structure n'est pas respectée.

Il me semble que PHP ne permet pas de faire cela.
Avez vous une solution ?

Merci.
__________________
Prestataires, inscrivez vous dans l'annuaire e-commerce des prestataires - foe.hn : un raccourcisseur d'url fun, avec API
max-mag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 10h28   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonjour,

il est impossible de contrôler la structure d'une variable de la même façon que le font les interfaces avec une classe.
Par contre tu peux très bien valider toi-même la structure de ta variable ainsi :
Code :
1
2
3
4
5
6
7
<?php
 
$data    = array('moteur' => 'XXX', 'pannes' => 'YYY', 'essais' => 'ZZZ');
$keys    = array('moteur', 'type');
$isValid = (count(array_intersect($keys, array_keys($data))) === count($keys));
 
?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 10h35   #3
Membre confirmé
 
Inscription : décembre 2006
Messages : 307
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 307
Points : 226
Points : 226
Merci pour l'astuce
__________________
Prestataires, inscrivez vous dans l'annuaire e-commerce des prestataires - foe.hn : un raccourcisseur d'url fun, avec API
max-mag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 11h45   #4
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Tu ne peux effectivement pas ajouter de variable membre dans une interface.
Par contre plutôt qu'utiliser un tableau tu peux forcer l'utilisation d'un type perso (une classe) qui dérivera d'une classe qui implémente déjà toute la bonne structure.

Ca permet d'avoir un type propre , bien structuré mais qui laisse la place à une évolution grâce à l'héritage :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class carType
{
	protected $moteur;
	protected $pannes = array();
}
 
public class myType extends carType
{
	public function setMoteur()
	{
	}
 
	public function getPanne()
	{
	}
}
 
interface UneInterface
{
	public function mandatory(myType $attribut);
}
Avec ça toute les classe implémentant "Uneinterface" aurons une méthode mandatory avec un attribut carType
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h39.


 
 
 
 
Partenaires

Hébergement Web