Notice: Undefined offset d'une fonction dans une classe

Notice: Undefined offset d'une fonction dans une classe - PHP - Programmation

Marsh Posté le 08-10-2006 à 22:42:13    

Bonsoir,
 
Voila, je me lance dans les classes php pour paraitre moins bete, mais malheureusement il me viens une erreur.
 
voici un code copier sur un site bien connu pour voir si j'obtiens bien la meme chose.
 

<?php
 
class Commande {
 
    var $prixRoyale = 6;
    var $prixCampagnarde = 8;
    var $nomClient;
    var $listePizzas;
 
    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];
        echo "<BR>Pizza(s) 'Campagnarde' : ".$this->listePizzas[1];
        echo "<HR>Totale de votre commande : ".$this->calculerPrix();    
        echo " Euros<BR>";
    }
 
}
 
$client1 = new Commande();  
$client1->nomClient="PHPDebutant";
$client1->ajouterRoyale(5);
$client1->ajouterCampagnarde(2);
$client1->afficherCommande();
 
?>


 
J' obtient cette erreur ci  
 
Notice: Undefined offset: 0 in d:\softwares\program files\easyphp1-8\www\template\index.php on line 11
 
Notice: Undefined offset: 1 in d:\softwares\program files\easyphp1-8\www\template\index.php on line 15
 
Je ne vois pas pourquoi il me génère une erreur sur ces 2 fonctions pourtant simplistes.
 
merci        ps=> je fonctionne sous easyphp 8, sous mon ftp de chez Free, aucune erreur annoncé :)


Message édité par Badze le 08-10-2006 à 22:47:36
Reply

Marsh Posté le 08-10-2006 à 22:42:13   

Reply

Marsh Posté le 08-10-2006 à 22:55:01    

Truc tout con mais que les débutants en php ne jugent pas toujours utile de faire : initialise tes variables. En l'occurence, définit ton $listePizzas comme un tableau et initialise $listePizzas[0] et [1] à 0, dans le constructeur par exemple.
 
C'est pas grand chose, mais ça a au moins un peu plus de sens que $this->listePizzas[0] += $nombre sans qu'on sache ce que vaut le tableau au départ :)

Reply

Marsh Posté le 09-10-2006 à 12:15:54    

Code :
  1. <?
  2. class Commande {
  3. /* ... */
  4. function Commande() {
  5.  $this->listePizzas = array(0 => 0, 1 => 0);
  6. }
  7. /* ... */
  8. }
  9. ?>

Reply

Marsh Posté le 09-10-2006 à 12:20:57    

pourquoi tu en profites pas pour faire un objet pizza ( au moins deux propriétés 'nom' et 'prix') et du coup tu n'aurais plus qu'une méthode dans commande 'addPizza', et tu stockes ta commandes dans un tableau associatif 'NomPizza'=>Nb elements commandés.

Reply

Marsh Posté le 09-10-2006 à 12:38:03    

Sans aller jusqu'à l'objet Pizza.
 
Imaginons une classe Commande qui fonctionne comme ça:

Code :
  1. $commande->addPizza("Royale", 5);
  2. $commande->addPizza("Campagnarde", 2);


 
Avec un tableau associatif pour stocker la liste.

Reply

Marsh Posté le 09-10-2006 à 17:31:27    

lol, merci de vos conseils, mais ce n'est pas tout à fait ce que je veux.
Ce code est tiré d'un tuto (phpdebutant). Afin de mieux cerné la chose, il nous montre des exemples simples de classe pour montrer son efficacité.
 
Je ne suis qu'a ce stade la.
 
Mon probleme viens plutot de la variable $nombre dans mes fonctions qui déconne, je ne vois pas pourquoi je doit les déclaré sanchant que rien ne ressort de celui ci
 
En tout cas je prend quand meme bonne note de vos conseils

Reply

Marsh Posté le 09-10-2006 à 17:41:20    

je peux esquivé cette erreur en modifiant le php.ini
 
error_reporting = E_ALL & ~E_NOTICE  
 
mais ça fait un peu crado, ya pas une solution svp ?

Reply

Marsh Posté le 09-10-2006 à 17:49:46    

naceroth te l'a déjà déjà donné hier ta solution. Il a d'ailleur été le premier à te répondre.
C'est quand même pas sorcié de faire un "$listePizzas = array (0 => 0, 1=> 0);" ou de faire une fonction d'initialisation des variables de l'objet.

Reply

Marsh Posté le 09-10-2006 à 18:00:50    

A merde, je n'avais pas calculé ce qu'il voulais dire, j'était persuader qui plantais sur la variable $nombre d'ou mon erreur.
 
Merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed