Prototype (Titre) d'une fonction ?

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Prototype (Titre) d'une fonction ?

    Bonjour,

    Autre souci lors d'un débogage (sous PHP 8.1.11) pour supprimer les erreurs qui pourraient survenir plus tard.
    J'ai ce message :
    Deprecated: Optional parameter $cid declared before required parameter $order is implicitly treated as a required parameter in D:\wamp64\www\demoj4\administrator\components\com_ rsappt_pro3\models\resources_detail.php on line 338
    Cela concerne cette fonction
    Code:
    function saveorder($cid = array(), $order)
    Je dois dire que je ne comprends pas pourquoi le fait de supprimer "= array()" fait disparaître l'erreur. Et surtout, qu'est-ce qui fait que $order est considéré comme requis et pas $cid.

    Quelqu'un peut-il m'expliquer ?
    Dernière édition par RobertG à 25/10/2022, 08h40
    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
    MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

  • #2
    Bonjour Robert,

    En PHP, lorsque tu ajoutes =array() à un paramètre, cela signifie que, s'il n'est pas renseigné dans l'appel, il aura une valeur par défaut. Si tu ne mets rien après ton paramètre, il devient obligatoire.

    En PHP 8, on est obligé de mettre les paramètres optionnels en fin d'appel de fonction : https://php.watch/versions/8.0/depre...after-optional

    En PHP 8.0 => warning
    En PHP 8.1 => error

    Pascal
    woluweb aime ceci.
    If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

    Commentaire


    • #3
      Merci Pascal !

      L'ennui, c'est que je ne peux pas inverser ces deux paramètres sans aller chercher tous les appels à la fonction.
      "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
      MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

      Commentaire


      • #4
        Hello

        Je ne l'ai pas encore testé mais sous php 8, tu as dorénavant les paramètres nommés. Si j'ai bien compris ton besoin, c'est ici une solution pour toi.

        La source de PHP 8.0 est prévue pour la fin de cette année avec un ambitieux programme, notamment : de nouvelles fonctionnalités : un compilateur JIT ;les « union types » ;les attributs ;une nouvelle classe WeakMap ;les simplifications de code apportées par les nouveaux constructeurs ;de nouvelles fonctions ; des changements qui auront un impact sur le code existant (Breaking changes) : la gestion de l’incrémentation d’index négatifs dans les tableaux ;des modifications sur la gestion des er...



        Note : on parle du prototype d'une fonction, pas de son "titre" ;-)
        Christophe (cavo789)
        Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
        Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

        Commentaire


        • #5
          Merci Christophe,

          En fait, l'extension fonctionne sans problème sous PHP 8.1 à condition de ne pas activer le rapport d'erreurs.
          Dans ce cas, j'essaie de comprendre comment, à part supprimer "= array()", on peut gérer ça au niveau de la fonction sans devoir aller inverser les deux paramètres.

          Il y en a d'autres aussi (j'en avais corrigé dans d'autres extensions) où un paramètre n'a pas de valeur par défaut mais où le suivant en a une. Si je me souvient bien, pour régler la question j'attribuais "null" comme valeur par défaut à celui qui n'en avait pas et tout roulait.

          Pardon pour mon erreur de nomenclature !
          "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
          MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

          Commentaire


          • #6
            Envoyé par RobertG Voir le message
            Dans ce cas, j'essaie de comprendre comment, à part supprimer "= array()", on peut gérer ça au niveau de la fonction sans devoir aller inverser les deux paramètres.
            Tu ne peux pas inverser les deux paramètres car, comme tu l'as mentionné, tu devrais reprendre chaque appel pour inverser là-aussi. D'ailleurs pourquoi faire cela ?

            Envoyé par RobertG Voir le message
            Il y en a d'autres aussi (j'en avais corrigé dans d'autres extensions) où un paramètre n'a pas de valeur par défaut mais où le suivant en a une. Si je me souvient bien, pour régler la question j'attribuais "null" comme valeur par défaut à celui qui n'en avait pas et tout roulait.
            Quand un paramètre n'a pas de valeur par défaut, c'est donc un paramètre obligatoire. Par contre, quand tu assignes une valeur par défaut, là il devient optionnel et ... il n'est pas possible de déclarer un paramètre obligatoire (pour rappel, qui n'a pas de valeur par défaut) après un paramètre optionnel or c'est exactement ce qu'on voit dans saveorder($cid = array(), $order). $order serait obligatoire et ça, c'est pas logique. Du coup, tu pourrais écrire saveorder($cid = array(), $order=null) puisque, là, on dit que le second paramètre est également optionnel.

            Maintenant, quelle valeur devrait avoir $order ? Est-ce qu'il ne faudrait pas écrire saveorder($cid = array(), $order = 'asc') dans l'idée que, si pas précisé, ce serait un tri ascendant ? Ici, je ne pourrais pas t'aider; faudrait lire le code de la fonction pour savoir de quoi il retourne.
            Dernière édition par cavo789 à 24/10/2022, 20h06
            Christophe (cavo789)
            Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
            Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

            Commentaire


            • #7
              Merci Christophe, je crois que j'ai compris. Reste à savoir si ma mémoire ne sera pas défaillante !
              "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
              MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

              Commentaire


              • #8
                Bonjour,

                Après analyse du code et d'une table concernée, il semble que $order corresponde à la colonne "ordering" définissant la position d'affichage des items de la table en question. Donc si j'ai vraiment compris, on pourrait mettre "$order = 0" (ou 1), sachant que cette position pouvant être définie dans la page de paramétrage de chaque élément, plusieurs items pouvant avoir la même. (dans une table de 10 éléments, cette position allait de 1 à 9, avec deux fois 9 sans que cela pose de problème, sauf que l'affichage par défaut se fait dans l'ordre des noms).
                "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                Commentaire

                Annonce

                Réduire
                Aucune annonce pour le moment.

                Partenaire de l'association

                Réduire

                Hébergeur Web PlanetHoster
                Travaille ...
                X