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 :

typage valeur retour


Sujet :

Langage PHP

  1. #1
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut typage valeur retour
    Je suis en PHP 8.2+.
    Je fais cette fonction - qui n'a aucun intérêt intrinsèque - uniquement pour tester le concept du typage d'une valeur de retour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    function from_digit_to_string(integer $input_number):string{
    	$chiffres = ['zéro', 'un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept'];
    	if($input_number < count($chiffres)){
    		return $chiffres[$input_number];
    	}
    	return $input_number;
    }
    echo from_digit_to_string(2);//deux
    echo from_digit_to_string(9);//9 est transformé en string alors que je m'attendais à une erreur fatale.
    ?>
    Je pense que mes commentaires suffisent à comprendre ma question : pourquoi 9, un entier en entrée ne provoque pas d'erreur mais est transformé en string ?
    Je pensais que je serais obligée de mettre return strval($input_number); pour respecter le type de la valeur de retour.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 413
    Points : 4 856
    Points
    4 856
    Par défaut
    Bonjour,

    La doc précise que le typage strict doit être activé pour lever ce genre d'erreur/avertissement.

    Par défaut, PHP va convertir les valeurs d'un mauvais type vers le type scalaire attendu tant que possible. Par exemple, une fonction, qui attend comme paramètre une string, à laquelle est passée un int recevra une variable de type string.
    En activant le typage strict au début du script declare(strict_types=1);, l'erreur est levée.

  3. #3
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Merci Toufik. Avec les bonnes résolutions de l'année, je vais tout rendre strict, garde à vous ! et bonne année quand même.

    Je mets ici le code qui fonctionne (le type étant int et non integer).

    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
    declare(strict_types=1);
    function digitToString(int $number):string{
        $numbers = [0, 1, 2, 3];
        $nombres = ['Zéro', 'Un', 'Deux', 'Trois'];
        if(in_array($number, $numbers)){
            return $nombres[$number];
        }
        return strval($number);
    }
    echo '<br/>';
    echo '<br/>';
    echo digitToString(2);//retourne "Deux"
    echo '<br/>';
    echo digitToString(7);//retourne "7"
     
    function stringToDigit(string $number):int{
        $nombres = ['Zéro', 'Un', 'Deux', 'Trois'];
        if(in_array($number, $nombres)){
            foreach($nombres as $position=>$nombre) {
                if ($number == $nombre) {
                    return $position;
                }
            }
        }
        return -1;
    }
    echo '<br/>';
    echo '<br/>';
    echo stringToDigit('Trois');//retourne 3
    echo '<br/>';
    echo stringToDigit('Sept');//retourne -1
    J'ai quand même encore une question : il faut mettre cette déclaration devant chaque script, en mode include par exemple ? Pas moyen de le modifier sur tout le projet via une config dans le php.ini ?

    ah pis j'en ai encore une tiens, de question : c'est une bonne pratique ou pas ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 413
    Points : 4 856
    Points
    4 856
    Par défaut
    Bonjour,

    Bonne année à vous de même, merci.

    Non, il n'est pas possible de définir ce paramètre dans php.ini, et le choix du mode se fait par fichier et basé sur l' appelant de la fonction, car :
    • Le paramètre doit affecter les fonctions intégrées ainsi que celles définies par l'utilisateur
    • Tout le code qui appelle des fonctions doit être vérifié ou mis à jour pour fonctionner correctement en mode 1, mais la plupart des anciens codes fonctionneront correctement en mode 0
    • Avec un paramètre global, vous ne pouvez utiliser que les bibliothèques qui ont été testées avec les deux modes, ou le même mode que vous préférez
    • Les fichiers qui ne déclarent pas leur mode préféré doivent continuer à fonctionner de la même manière que PHP 5.x pour permettre l'exécution du code existant ; cela n'est possible que si la valeur par défaut est le mode 0


    Une bonne pratique ou pas, je dis oui car il est toujours important d'optimiser le code afin qu'il renvoie le résultat attendu.

  5. #5
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Merci de ta réponse détaillée, Toufik.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

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

Discussions similaires

  1. Executer une ligne de commande ET recuperer valeur retour
    Par Korko Fain dans le forum Delphi
    Réponses: 4
    Dernier message: 10/08/2007, 16h31
  2. Valeur retour exe
    Par the big ben 5 dans le forum Delphi
    Réponses: 5
    Dernier message: 21/06/2007, 10h17
  3. [VB.net] Pb valeur retour ExecuteNonQuery
    Par nico10gbb dans le forum Windows Forms
    Réponses: 10
    Dernier message: 18/04/2006, 12h22
  4. PB avec valeur retour array
    Par richton95 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 10/01/2006, 15h33
  5. Valeur retour de DoModal() ?
    Par loupdeau dans le forum MFC
    Réponses: 2
    Dernier message: 10/06/2005, 11h16

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