8722 sujets

Développement web côté serveur, CMS

Bonjour,

Je me penche sur les class et j'ai un petit problème.

Voici mon code :

<?php

class Commande {

    var $prixRoyale = 6;

    var $prixCampagnarde = 8;

    var $nomClient = "SansNom";

    var $listePizzas;



    //Constructeur avec paramètre

    function Commande($nom) {

        if ($nom != "") $this->nomClient = $nom;

    }


    function ajouterRoyale($nombre) {

        $this->listePizzas[0] += $nombre;

    }


    function ajouterCampagnarde($nombre) {

        $this->listePizzas[1] += $nombre;

    }

    function calculerPrix() {

        $montant_Royale = $this->listePizzas[0] * $this->prixRoyale;

        $montant_Campagnarde = $this->listePizzas[1] * $this->prixCampagnarde;

        return $montant_Royale + $montant_Campagnarde;

    }

    /**
     *
     */
    function afficherCommande() {

        echo "Commande du client : ".$this->nomClient;

        echo "<BR>Pizza(s) 'Royale' : ".$this->listePizzas[0]. " <u>Prix UT</u> : " .$this->prixRoyale;
        echo "<BR>Pizza(s) 'Campagnarde' : ".$this->listePizzas[1]. " <u>Prix UT</u> : " .$this->prixCampagnarde;

        echo "<HR>Totale de votre commande : ".$this->calculerPrix();

        echo " Euros<BR>";

    }

}

$client = new Commande("Maxime");

$client->ajouterRoyale(2);

$client->ajouterCampagnarde(3);



$client1 = new Commande("Laura");

$client1->nomClient="Laura";

$client1->ajouterRoyale(3);  // elle veux 1 "Pizza Royale" (régime...)

echo "<br><br>";

$client->afficherCommande();

echo "<br><br>";

$client1->afficherCommande();

?>


On voit bien que Laura, n'a commandé qu'une pizza et j'ai une ligne avec
Pizza(s) 'Campagnarde' : Prix UT : 8

Ce qui veut dire pizza campagnarde = 0 prix 8.

Je cherche un moyen de ne pas afficher la ligne de pizza, si il y en a pas de commander.

Truc, idiot, je suis une chèvre, mais je bloque.

C'est un exercice pour moi, et j'aimerai bien avoir un peu d'aide.

Merci d'avance pour vos retours.
Il suffit de tester si la valeur de $this->listePizzas[0] (c'est pas super explicite d'utiliser 0 et 1 comme index en passant) est supérieure à 0.
Merci, j'ai pris le code sur un cours, et je rame un peu pour pousse un peu plus loin le code.

Il faut que je mette if en gros ? dans function afficherCommande() ?

Pour vérifier que la pizza est bien dans le panier d'achat. Je code de manière classique ou il y a une méthode bien particulière pour ce genre de code ?
Modifié par Tintin75 (26 Sep 2017 - 20:29)
Tintin75 a écrit :
Merci, j'ai pris le code sur un cours, et je rame un peu pour pousse un peu plus loin le code.

Il faut que je mette if en gros ? dans function afficherCommande() ?

Pour vérifier que la pizza est bien dans le panier d'achat. Je code de manière classique ou il y a une méthode bien particulière pour ce genre de code ?


Salut !

Oui, "en gros" tu dois mettre un "if" dans la fonction qui te retourne les lignes sur les commandes. Tu devrais donc avoir un truc dans ce genre :


   function afficherCommande() {
        echo "Commande du client : ".$this->nomClient;
if(!empty($this->listePizzas[0])){
        echo "<BR>Pizza(s) 'Royale' : ".$this->listePizzas[0]. " <u>Prix UT</u> : " .$this->prixRoyale;
}

if(!empty($this->listePizzas[1])){
        echo "<BR>Pizza(s) 'Campagnarde' : ".$this->listePizzas[1]. " <u>Prix UT</u> : " .$this->prixCampagnarde;
}

        echo "<HR>Totale de votre commande : ".$this->calculerPrix();

        echo " Euros<BR>";

    }


Voilà Smiley smile
Modifié par Yokii (27 Sep 2017 - 08:59)
Meilleure solution
Bonjour Yokii,

Merci ça fonctionne nickel, reste à comprendre ton code. Merci pour le coup de main. Je m'y prenait mal.

En fait c'est pas sorcier, c'est le $this->listePizzas[0], qui m'a perturbé dans mon code.

Merci encore, bonne journée. Smiley smile
Modifié par Tintin75 (27 Sep 2017 - 09:55)
Tintin75 a écrit :
Bonjour Yokii,

Merci ça fonctionne nickel, reste à comprendre ton code. Merci pour le coup de main. Je m'y prenait mal.

En fait c'est pas sorcier, c'est le $this-&gt;listePizzas[0], qui m'a perturbé dans mon code.

Merci encore, bonne journée. Smiley smile


Très simple : en fait, je vérifie que je récupère bien un nom de pizza. Si oui, j'affiche la commande, sinon, je n'affiche rien.

Le plus dur va être d'optimiser ça : en effet, ton code est facilement maintenable si tu as deux pizzas, mais imagine que ta carte contienne 150 pizzas... Tu t'imagines dupliquer 150 fois tes conditions ?

Bon courage en tout cas Smiley smile
Oh, c'est un code pour apprendre, pas pour passer en prod.

L'exemple des pizzas est bon, car facilement compréhensible. C'est le seul que j'ai trouvé qui me plaisait.

Le if je l'utilise depuis des lustres, mais là, je m'y prenais mal. Trouver des cours avec des bons exemples, ça cours pas les rues sur certain sujet.

Merci encore de ton aide, c'est sympa. Smiley cligne