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 16/03/2011, 12h57   #1
Invité de passage
 
Inscription : mars 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 3
Points : 0
Points : 0
Par défaut Objet et constante

Bonjour, issu de la POO Java et JavaScript, j'aurais une question concernant les constantes. J'ai appris qu'elles ne pouvaient contenir vraisemblablement des infos scalaires. Mais alors, comment faire pour obtenir ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Class Objet{
 
    function __construct(){
    ...............
    }
 
    function changeColor( Color $color ){
    ...............
    }
 
}
 
$objet = new Objet();
$objet->changeColor( Color::BLACK )
Par avance, merci pour votre aide !
fredp006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 13h40   #2
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
Par exemple :
Code :
1
2
3
class Color {
 const BLACK = '#000000';
}
Cependant dans ton exemple tu demandes un objet Color donc pas une constante.

Soit tu fais
Code :
function changeColor( Color $color ){
Auquel cas tu devras fournir un objet Color ,soit tu fais
Code :
function changeColor( $color ){
Auquel cas tu fournira une chaine ou un entier qui pourra cette fois être une constante de Color
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 13h53   #3
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 014
Points : 5 014
A noter qu'avec l'arrivée du late static binding en PHP 5.3, les constantes ont le comportement des membres statiques:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
class TEST {
  const any_const = 1;
 
  public static function getVAR () { return static::any_const; }
}
 
class ANOTHER extends TEST {
  const any_const = 2;
}
 
echo ANOTHER::getVAR();
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 13h54   #4
Invité de passage
 
Inscription : mars 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 3
Points : 0
Points : 0
Ok ,merci , je suis d'accord avec toi mais si je veux une couleur rouge définit par un code couleur imposé comme par exemple, il est plus clair de faire
Code :
$obj->changeColor( Color::RED_LIGHTER );
que :
Code :
$obj->changeCOlor( new Color( 228,15,31) );
C'est pourquoi, ma question était surtout de savoir si à l'instar d'autre langage Objet comme Java, C ou JavaScript on pouvait stocker une valeur explicite dans sa nomination (comme une constante) un objet ?

De plus pour l'intégrité de mes classes, je veux que mon accesseur vérifie que le paramètre passé soit un objet Color
fredp006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 14h59   #5
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
Code :
const BLACK = new Color(0,0,0)
N'est pas possible , j'ai d'ailleurs pas le souvenir que ce le soit en java (mais ça fait longtemps ^^ ).

Tu peux en revanche contourner plus ou moins le problème :

Code :
1
2
3
4
public function changeColor( Color $color,$hexColor ){
    $color->setColor($hexColor);
}
$objet->changeColor($color,Color::BLACK)
Avec Color::BLACK représentant par exemple une valeur hexa de la couleur.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 15h15   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 014
Points : 5 014
Dommage que PHP ne supporte pas plusieurs prototypes pour une méthode donnée... On peut toutefois le faire à la main:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
<?php
 
class Color {
 
  protected $_r;
  protected $_g;
  protected $_b;
 
  public function __construct () {
	//...
  }
 
  public function changeColor ($value) {
	if (is_scalar($value) {
		// ...
	}
	elseif (is_array($value) {
		// ...
	}
	elseif (is_object($value) && is_a($value, __CLASS__)) {
		// ...
	}
	else {
		throw new InvalidParameterException("Wrong parameter: string, hex, interger, array or Color expected, ".gettype($value)." given");
	}
  }
 
  public function hex () {
	// TODO
  }
 
  public function rgb () {
	return array($this->_r, $this->_g, $this->_b);
  }
}
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 16h37   #7
Invité de passage
 
Inscription : mars 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 3
Points : 0
Points : 0
Par défaut merci

Merci a tous pour votre aide !
fredp006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h01.


 
 
 
 
Partenaires

Hébergement Web