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 :

Erreur: Upload\Upload::setSecureMode() must be an instance of Upload\boolean, bool given


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    décembre 2008
    Messages
    1 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 309
    Points : 672
    Points
    672
    Par défaut Erreur: Upload\Upload::setSecureMode() must be an instance of Upload\boolean, bool given
    Bonjour,
    Je reprends une classe existante et je veux générer une erreur si le type de l'argument n'est pas correct.
    Code d'appel en dehors de la classe: $upl->setSecureMode(true);.
    Code dans la classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public function setSecureMode(boolean $mode)
    	{
    		$this->secureMode = $mode;
    		return $this;
    	}
    J'ai juste ajouté le mot clé boolean à la première ligne ce qui provoque l'erreur:
    Upload\Upload::setSecureMode() must be an instance of Upload\boolean, bool given
    J'ai essayé de remplacer boolean par \boolean mais l'erreur persiste à l'identique.

    EDIT: La variable secureMode est déclarée en début de classe comme ceci: private $secureMode;.

  2. #2
    Membre régulier
    Homme Profil pro
    Autre
    Inscrit en
    juillet 2021
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : juillet 2021
    Messages : 66
    Points : 121
    Points
    121
    Par défaut
    Bonjour,

    boolean est un alias du type bool, or il n'est pas possible d'utiliser un alias pour la déclaration des types (cf. le premier avertissement sur https://www.php.net/manual/fr/langua...clarations.php)

    Essaye d'utiliser bool à la place de boolean.

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    décembre 2008
    Messages
    1 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 309
    Points : 672
    Points
    672
    Par défaut
    J'avais déjà essayé et j'ai rencontré le problème suivant: Au lieu de contrôler le type d'argument et déclencher une erreur, cette écriture modifie l'argument en son équivalent booléen. Par exemple si l'argument vaut 'xxx', il devient true comme si j'avais (bool) entre parenthèses.
    Je me rappelle avoir déjà eu le problème dans une version précédente de php et il me semble qu'à l'époque j'avais du remplacer function myfunction(bool arg) par function myfunction(boolean arg).
    Actuellement j'utilise la version 7.4.0 de php.

  4. #4
    Membre régulier
    Homme Profil pro
    Autre
    Inscrit en
    juillet 2021
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : juillet 2021
    Messages : 66
    Points : 121
    Points
    121
    Par défaut
    En effet par défaut PHP va convertir automatiquement les paramètres du mauvais type.
    Si tu veux que PHP déclenche une erreur lorsque le mauvais type est passé en paramètre, tu peux pour cela activer le typage strict :
    https://www.php.net/manual/fr/langua...rations.strict

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    décembre 2008
    Messages
    1 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 309
    Points : 672
    Points
    672
    Par défaut
    Oui, cela fonctionne mais la remarque suivante est bien embêtante:
    Le typage strict s'applique aux appels de fonction effectués depuis l'intérieur d'un fichier dont le typage strict est actif, et non aux fonctions déclarées dans ce fichier. Si un fichier dont le typage strict n'est pas activé effectue un appel à une fonction qui a été définie dans un fichier dont le type strict est actif, la préférence de l'appelant (mode coercitif) sera respecté et la valeur sera forcée.
    Elle impose de répéter le mode strict dans tous les fichiers qui utilise la fonction à moins, peut-être, de la généraliser dans tous les scripts.

Discussions similaires

  1. [PHP 5.2] Erreur Upload de gros fichiers
    Par jep33 dans le forum Langage
    Réponses: 2
    Dernier message: 08/06/2009, 14h19
  2. Erreur upload fichier via formulaire
    Par Telecaster dans le forum Langage
    Réponses: 2
    Dernier message: 05/02/2009, 11h30
  3. [Upload] AFFICHAGE ERREUR upload.php
    Par cherifa dans le forum Langage
    Réponses: 1
    Dernier message: 17/09/2006, 15h29
  4. [Upload] Erreur Upload
    Par gregal dans le forum Langage
    Réponses: 1
    Dernier message: 13/02/2006, 19h01
  5. [Upload] Gestion d'erreur upload
    Par vincedjs dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2006, 13h18

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