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 :

typer une variable [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 702
    Points : 43 779
    Points
    43 779
    Par défaut typer une variable
    Bonsoir,

    Est-il possible en PHP 5 de typer une variable ?

    Je me suis retrouvé avec le résultat d'une division par 2 d'une variable contenant un nombre entier me retournant un nombre à virgule (je voulais le quotient entier). Je m'en suis sorti avec un transtypage pour le moment.

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 895
    Points : 6 651
    Points
    6 651
    Par défaut
    À part utiliser le transtypage, je ne vois pas trop:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $a = 3/2;
    echo $a, PHP_EOL; // 1.5
    echo (int)$a, PHP_EOL; // 1
     
    var_dump( (string)$a === 1.5 ) // bool(false)
    var_dump( (string)$a === '1.5' ) // bool(true)
    Maintenant, dans le cas particulier des puissances de deux, tu peux faire un décalage de bits:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var_dump(3>>1); // int(1)
    var_dump(13>>2); // int(3)
    Tu peux utiliser floor() pour arrondir à l'entier inférieur mais le résultat sera de type float.

    Tu peux également jeter un œil sur l'extension GMP et sa fonction gmp_div_q() qui renvoie une ressource GMP ou gmp_div_qr() qui renvoie un tableau avec le quotient et le reste.

    Après rien ne t'empêche de créer ta propre classe avec une méthode pour la division entière. Il existe même une extension PECL operator qui permet la surcharge des opérateurs.

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 702
    Points : 43 779
    Points
    43 779
    Par défaut
    Merci pour le retour.

    C'est ce que j'ai fait.

    Et en relisant la doc :

    L'opérateur de division ("/") retourne une valeur à virgule flottante sauf si les 2 opérandes sont des entiers (ou une chaîne de caractères qui a été convertie en entiers) et que leur division est exacte (i.e. a pour reste 0), auquel cas une valeur entière sera retournée.
    Il est donc logique que je doive faire un traitement.

    et par curiosité, en PHP 7 on ne peut pas typer ? (sans être obligé de le faire).

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 393
    Points : 15 754
    Points
    15 754
    Par défaut
    avec PHP 7, il n'y a pas de typage de variable et cela n'a pas l'air prévu dans futur.
    Je viens d'essayer des divisions avec PHP 7.0 et le résultat est toujours correct par rapport à la documentation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $v1 = 5/2;
    $v2 = 10/2;
    $v3 = 10./2;
     
    var_dump($v1); // float(2.5)
    var_dump($v2); // int(5)
    var_dump($v3); // float(5)
    Par contre, il est possible de vérifier à l'exécution le type d'un argument d'un fonction :
    http://php.net/functions.arguments#f...pe-declaration

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 895
    Points : 6 651
    Points
    6 651
    Par défaut
    Ce que tu peux faire avec PHP7 c'est passer par une fonction pour imposer un type de retour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function div(int $a, int $b) : int {
         return $a/$b;
    }
     
    echo div(3,2); // 1

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/02/2014, 20h39
  2. Typer une variable depuis un string
    Par Finality dans le forum C#
    Réponses: 12
    Dernier message: 07/06/2010, 22h30
  3. Typer une variable avec interface
    Par topolino dans le forum ASP.NET
    Réponses: 2
    Dernier message: 22/12/2009, 12h26
  4. Réponses: 5
    Dernier message: 28/02/2008, 14h35
  5. Réponses: 4
    Dernier message: 05/06/2002, 14h35

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