IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Objet et constante


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    function changeColor( Color $color ){
    Auquel cas tu devras fournir un objet Color ,soit tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function changeColor( $color ){
    Auquel cas tu fournira une chaine ou un entier qui pourra cette fois être une constante de Color
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    A noter qu'avec l'arrivée du late static binding en PHP 5.3, les constantes ont le comportement des membres statiques:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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();

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $obj->changeColor( Color::RED_LIGHTER );
    que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Dommage que PHP ne supporte pas plusieurs prototypes pour une méthode donnée... On peut toutefois le faire à la main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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);
      }
    }

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    Par défaut merci
    Merci a tous pour votre aide !

Discussions similaires

  1. set contenant des objets non constants
    Par 5kippy dans le forum SL & STL
    Réponses: 6
    Dernier message: 10/11/2007, 13h01
  2. Constante objet modifiable !
    Par j0o0 dans le forum Langage
    Réponses: 1
    Dernier message: 08/05/2007, 08h34
  3. Réponses: 10
    Dernier message: 04/07/2006, 20h57
  4. [POO] Définition de constantes dans un objet en PHP5
    Par wdionysos dans le forum Langage
    Réponses: 9
    Dernier message: 29/03/2006, 19h51
  5. Réponses: 6
    Dernier message: 03/09/2003, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo