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

Contribuez / Téléchargez Sources et Outils PHP Discussion :

Class table html5


Sujet :

Contribuez / Téléchargez Sources et Outils PHP

  1. #1
    Membre actif

    Inscrit en
    Octobre 2010
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 168
    Points : 241
    Points
    241
    Par défaut Class table html5
    Bonjour,

    Je vous propose un nouvel élément à utiliser : Class table html5

    Injectez vos datas directement dans une balise avec options de formatage.

    Qu'en pensez-vous ?

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 217
    Points
    8 217
    Billets dans le blog
    17
    Par défaut
    Merci pour la proposition !

    Dans l'ordre de ma découverte...

    C'est documenté, c'est bien. Par contre il y a beaucoup plus de CSS que de PHP.
    La chasse des extraits de code n'est pas fixe. Le code est dur à lire.
    Pourquoi utiliser array() quand [], plus concis, est disponible depuis 2012 ?

    class_table2_15.php => Si tu tiens vraiment à intégrer la version dans le nom de fichier fais quelque chose comme Table@2.15.php, on comprend tout de suite qu'il s'agit de la version, et si tu ranges tes classes dans /classes ou /lib (ce qui devrait être le cas) alors le préfixe en "class_" est redondant

    Le script est dur à lire, ne respecte pas les bonnes pratiques de présentation, et est inconsistant, ex.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if( is_array($tdata) ){
    if(!empty($this->titre)){
    Il faut se donner une règle de présentation et la tenir jusqu'au bout, l'idéal étant de suivre les règles généralement acceptées comme
    PSR-1 => https://www.php-fig.org/psr/psr-1/
    PSR-12 => https://www.php-fig.org/psr/psr-12/

    En temps normal quand le script est mal présenté je ne vais pas plus loin

    Généralement on nomme les classes en PascalCase => class Table, le tout majuscule étant plutôt utilisé pour dénommer les constantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function __construct( &$tdata = NULL, bool $Tinvers=false, array $op=null, string $title='' ){
    Il faudrait donner la visibilité des méthodes => public function __construct(...), voir PSR
    Pourquoi nommer ta variable $op ? $options est immédiatement compréhensible.

    &$tdata : pourquoi & ? Les paramètres passés par référence sont généralement considérés comme une mauvaise pratique car c'est une porte ouverte à des effets de bord et un enfer à débuguer.

    Pourquoi $tdata et $Tvision ? L'une en minuscule et l'autre en majuscule ? Pourquoi un préfixe t ?
    Pourquoi un tableau d'options en 3e paramètre et $Tinvers en 2e paramètre ? $op sera plus souvent utilisé qu'un pivot il me semble, et pourquoi ne pas intégrer le pivot et le caption aux options ?
    Pourquoi $title et $titre ? Il faut se tenir à 1 langue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function verif_data(&$item, $key){
    Pas fan de la fonction de fonction. En faire une méthode ou une fonction anonyme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if( is_null($item) || (empty($item) && $item!=0) ){ 
        $item=" ";
    Pas fan de la création de contenu initialement absent pour des motifs de rendu. Cela doit se gérer en CSS.
    Peut-être à passer en paramètre à $options.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function __construct( &$tdata = NULL, bool $Tinvers=false, array $op=null, string $title='' ){
        if( is_array($tdata) ){
            // Beaucoup
            // Beaucoup
            // Beaucoup de code
        }else{
            $this->erreur='La variale n\'est pas un tableau';
        }
    2 choses :
    Si tu veux que $tdata soit obligatoirement un tableau, alors laisse PHP gérer ça on précisant le type dans le constructeur => public function __construct(array $data, ...)
    Il faut éviter les longs if(), éviter les else autant que possible et vérifier les situations anormales en entrée de fonction/méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function __construct($data) 
    {
        if (!is_array($data)) {
            throw new TypeError('$data doit être un tableau');
        }
        // À partir de là on sait que $data est un tableau, pas besoin de else, pas besoin d'un niveau d'indentation supplémentaire
    }
    Voilà je m'arrête là
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    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 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Ta classe et ton constructeur font trop de choses. Part plutôt sur quelque chose comme ça:
    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
    32
    33
    34
    35
    36
    37
    38
     
    /* tout ce qui est information: titre, data, header, footer */
    class TableData
    {
     
        public function __construct(array $data = [])
        {
            $this->setData($data);
        }
     
        public function setData(array $data = [])
        {}
     
        public function setTitle(string $title)
        {}
     
        public function setFooter()
        {} // etc.
    }
     
    /* tout ce qui est aspect de la table: transposé ou non, attributs html (id, class), colonnes ou lignes mises en évidence ...*/
    class TableOptions
    {}
     
    class Table
    {
        public function __construct(TableData $tableData, TableOptions $tableOptions)
        {}
     
        /* display a la charge de produire le html en fonction des données et options dont l'instance dispose
           Au besoin ne pas hésiter à déléguer certaines tâches si cette méthode devient obèse:
             - une méthode qui s'occupent du titre
             - une autre pour les données
             - une pour le footer, etc.
        */
        public function display() // ou buildHtml(): string
        {}
    }
    de manière à déléguer un maximum. Tes méthodes doivent rester concises, lisibles, avec un rôle bien précis.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

Discussions similaires

  1. [2.x] Class Table Inheritance
    Par tom42 dans le forum Symfony
    Réponses: 2
    Dernier message: 17/02/2012, 14h47
  2. [PHP 5.3] Problèmes de classe TABLE
    Par ETVigan dans le forum Langage
    Réponses: 18
    Dernier message: 13/01/2011, 14h57
  3. [UML CLASSES TABLES] Passage des classes aux tables
    Par Trompette83 dans le forum Diagrammes de Classes
    Réponses: 1
    Dernier message: 05/08/2007, 17h53
  4. Mapping classes - tables (outil)
    Par taroudant dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 22/05/2007, 17h09

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