CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

PHP Désactiver/filtrer Strict Standards

vava740
vava740
Niveau 10
07 mai 2013 à 10:45:03

http://pastebin.com/fTCSnkDJ

Ce code me donne l'erreur suivante :

Strict Standards: Declaration of Bar::toto() should be compatible with Foo::toto($a, $b, $c) in C:\server\web\test.php on line 16

Je suis sous PHP 5.4 avec la config de développement par défaut.

Y'a-t-il un moyen de désactiver ce type d'erreurs (étrangement le fait de désactiver l'error reporting ne change rien :ouch2: ), ou même si possible de désactiver cette erreur en particulier ?

Dans l'idéal je voudrais garder les autres erreurs E_STRICT mais juste supprimer cette contrainte que je trouve aberrante dans la façon de faire de l'objet en PHP.

vava740
vava740
Niveau 10
07 mai 2013 à 11:23:00

Apparemment la fonction error_reporting (et ini_set) ne fonctionne pas du fait que j'utilise PHP en CGI (avec Nginx). Si je modifie le php.ini et que je relance le serveur fastcgi je n'ai plus ce message d'erreur.

Néanmoins j'aurais aimé cibler cette configuration pour un projet en particulier (et sans toucher à la config Nginx ou au php.ini), c'est faisable ?

3615_mylife
3615_mylife
Niveau 10
08 mai 2013 à 07:18:00

Impossible d'accéder à ton code.

Sinon pourquoi ne pas tout simplement rendre compatible la méthode enfant avec la méthode parent ? :noel:

vava740
vava740
Niveau 10
08 mai 2013 à 10:14:16

C'est dingue on peut même plus partager du code correctement quand deblan.fr est down. :noel:

Chez-moi le lien marche bien pourtant, j'ai uploadé le pastebin au boulot et là je suis chez-moi, pas le même PC, pas la même ip, et j'ai pas de compte pastebin.

Bref je te mets un exemple dans ce post, en gros je souhaiterais faire comme la méthode __construct mais sur un autre nom de méthode.

class Foo {

       public function init($a) {}
}

class Bar extends Foo {

       public function init($a, $b) {

              // Do stuff

              parent::init($a);
       }
}

En fait mon délire c'était d'avoir une classe Object parente à tous les objets, avec une fonction constructeur par défaut prenant un nombre d'arguments dynamiques, et qui appelle la méthode init avec les arguments donnés. Le but c'est d'unifier le nommage de certaines méthodes particulières de mes classes entre les objets PHP et JS, comme ça j'aurais une méthode init dans mes objets, peu importe qu'on soit en PHP ou JS, et le framework se chargerait de l'appeler soit depuis le constructor JS, soit depuis le __construct PHP.

Sauf que je veux garder la possibilité d'appeler la méthode init parente, et avec des arguments différents. Si tu remplaces "init" par "__construct" dans mon exemple précédent ça marchera très bien, vu que PHP sait explicitement que c'est le constructeur de la classe et en toute logique les arguments sont spécifiques à la classe qui est instanciée.

Par contre PHP reconnaît la méthode init comme une méthode "classique", en gros si je voulais faire ceci en partant de mon code précédent :

function test(Foo $foo) {

       $foo->init('a');
}

test(new Bar);

Ça me déclencherait une erreur vu qu'on attend un Foo et que le Bar réécrit init avec d'autres arguments...

Bref je veux faire des trucs pas corrects dans certains cas très particuliers (dans lesquels c'est correct mais pas du point de vue de PHP) et j'aurais bien aimé pouvoir virer juste cette spécificité du E_STRICT (pas tout le E_STRICT si possible), et surtout ans toucher directement au php.ini.

Quoi qu'il en soit ça m'a l'air impossible donc j'ai renoncé à mon utopie d'unifier à la perfection le nommage de mes classes PHP et JS. :snif:

Après j'avais aussi l'impression d'avoir besoin de ce genre de fonctionnement pour d'autres méthodes, comme une toString surchargée, mais j'arrive pas à trouver d'exemple concret où ça pose problème.

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment