Bonsoir je commence tout juste en poo et donc j'aimerais avoir des conseils et des avis sur ce code

<?php
    class Formulaire
    {
        public $type;
        public $id;
        public $value;
        public $class;

        public function input($type, $id, $value, $class)
        {
            return
            "
                <label for=$id>
                    $value
                </label>
                <input type=$type name=$id id=$id class=$class>
            ";
        }

        public function submit($type, $class, $value)
        {
            return
            "
                <button type=$type class=$class>
                    $value
                </button>
            ";
        }
    }
?>

Merci bonne soirée !

6 réponses


Dans ton cas tu n'as pas besoin de définir des variables au début tu peux donc supprimer cette partie :

public $type;
public $id;
public $value;
public $class;

Ensuite tu oublies les guillements à tes propriétés html et pour terminer vu que tes fonctions sont statiques tu pourrais rajouter un static devant function ;)

De cette façon tu pourrais les appeler de la sorte : Formulaire::input ;)

Ce que tu peux améliorer pour commencer c'est par vérifier par exemple si $_POST ne contient pas déjà la valeur du nom de ton champ pour pouvoir le remplir si quelque chose a déjà été saisi par exemple. Tu peux aussi donner des valeurs par défaut aux attributs $classe par exemple ;)

<?php
    class Formulaire
    {   
        public static function input($type, $id, $value)
        {
            return
            "
                <label for=$id>
                    $value
                </label>
                <input type=$type name=$id id=$id class='form-control'>
            ";
        }

        public static function submit($type, $value)
        {
            return
            "
                <button type=$type class='btn btn-default'>
                    $value
                </button>
            ";
        }
    }
?>
<?php
    require 'form.php';
    $form = new Formulaire();
?>

<form action="" method="post">
    <?= Formulaire::input('text', 'identifiant', 'Votre identifiant', 'maClass'); ?>
    <?= Formulaire::input('password', 'password', 'Votre mot de passe', 'maClass'); ?>
    <?= Formulaire::submit('submit', 'maClass', 'Connexion'); ?>
</form>

Voilà où j'en suis après je comprend pas pourquoi mettre static ?

Je te conseil de regarder la formation de Grafikart sur la POO, car il est assez clair que tu ne comprend pas ce que tu fais ;)

ça te permettra de comprendre le pourquoi du static par exemple.

Bonjour, bonjour, :)

Juste parce qu'il a instancié son objet tu lui dit ça ?

Il ce peut qu'il ai juste oublier de l'enlever vue que dans son premier code il n'avais pas de méthode static...

Jugé ton niveau de compréhension de l'OO sur un code de ce genre, ce n'est pas facile du tout ^^

Cordialement.

Pour les variables membre de ta classe "Formulaire" tu dois n'avoir que des données du formulaire :
id du formulaire (risque de conflit avec les autres id, mets plutot id_frm), method et class.
pas de 'type' ni de 'value' pour le formulaire
Pour les input, je rajouterais les options, un tableau qui reprend les "required, disabled, size, pattern ...."
ensuite il y a les Select et TextArea mais je suppose que tu pensais les rajouter après.

Je vois que tu utilises les class Bootstrap, pourquoi ne pas faire une class générique "non bootstrap" et une classe Frm_Bootstrap qui hérite de la classe générique, après il suffit de surcharger les méthodes ou simplement rajouter les class "btn " , " form-control" dans le contructeur.