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

Langage PHP Discussion :

Fonction count() dans une classe


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 18
    Par défaut Fonction count() dans une classe
    Bonjour,

    J'ai une classe avec comme propriété un tableau déclaré par : var $TableauOperations = [];

    L'unique instance de cette classe est stockée comme variable de session.

    Une méthode de cette classe remplit le tableau en question (par paquets) ; jusque là tout fonctionne bien.

    Pour pouvoir utiliser cette méthode plusieurs fois sans écraser les éléments précédents, je souhaite utiliser la fonction count() afin de ne pas repartir de l'indice 0 mais d'un indice correspondant au nombre d'enregistrements précédents. Voici le code :

    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
     
    Class ExosFeuille {
     
    var $NomFeuille ;	// sera affiché pour re-choisir une feuille existante
    var $TableauOperations = [];
     
    public function __construct(string $NFeuille) 
    	{
            $this->NomFeuille = $NFeuille;
    	}	// fin constructeur
     
    public function AjouteOperations($TypeOp, int $NbNb, int $TailleNbs, $NbOccurences)
    	{
    	$Compte = count($TableauOperations);
    	for ($i = 0 ; $i < $NbOccurences ; $i++)
    		{
    		$NOp = new ExosOperation($TypeOp, $NbNb, $TailleNbs);
    		$NOp->Init();
    		$this->TableauOperations[$i+$Compte] = $NOp;
    		}
    	}
    Mais quand j'arrive à la ligne utilisant le "count" je prends l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Warning: Undefined variable $TableauOperations in C:\xampp\htdocs\ExosClasses.inc.php on line 142
     
    Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in C:\xampp\htdocs\ExosClasses.inc.php:142 Stack trace: #0 C:\xampp\htdocs\ModificationFeuille.php(16): ExosFeuille->AjouteOperations(0, 2, 2, '4') #1 {main} thrown in C:\xampp\htdocs\ExosClasses.inc.php on line 142
    Je ne comprends pas le warning, car, dans la version précédente, j'avais déjà cette ligne de code qui utilise le même tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->TableauOperations[$i] = $NOp;
    Je pense que l'erreur ensuite provient de la même cause que celle du warning.

    Help

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 701
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 701
    Par défaut
    quand vous utilisez $TableauOperations dans une méthode de la classe, vous utilisez une simple variable.
    pour utiliser l'attribut de l'objet, vous devez mettre $this->TableauOperations et donc la ligne 142 devient $Compte = count($this->TableauOperations);.


    et un conseil qui n'a rien à voir avec le message d'erreur : pour ajouter des éléments à la fin du tableau, vous pouvez simplifier le code comme cela :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public function AjouteOperations($TypeOp, int $NbNb, int $TailleNbs, $NbOccurences)
    {
     
    	for ($i = 0 ; $i < $NbOccurences ; $i++)
    		{
     
    		$NOp = new ExosOperation($TypeOp, $NbNb, $TailleNbs);
    		$NOp->Init();
     
    		$this->TableauOperations[] = $NOp;
     
    		}
     
    }

  3. #3
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 18
    Par défaut
    un double merci, Mathieu !!

    (et pardon pour l'oubli de $this)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction récursive dans une classe
    Par Orbiplanax dans le forum Langage
    Réponses: 4
    Dernier message: 17/10/2007, 17h24
  2. Une fonction SessionState dans une classe?
    Par CWagon dans le forum ASP.NET
    Réponses: 7
    Dernier message: 24/08/2007, 22h00
  3. Réponses: 3
    Dernier message: 14/12/2006, 11h09
  4. fonction static dans une class
    Par Stany dans le forum C++
    Réponses: 3
    Dernier message: 16/06/2006, 15h43
  5. Fonction callback dans une classe
    Par julian_ross dans le forum MFC
    Réponses: 8
    Dernier message: 02/03/2004, 12h42

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