Visualizzazione dei risultati da 1 a 4 su 4

Discussione: problema con classi

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    165

    problema con classi

    Salve, ho un problemino con due classi...

    La prima classe Magazzino ha due attributi:

    Codice PHP:
    public $capienza;
    public 
    $indirizzo
    e quattro metodi che sarebbero i classici get e set per i due attributi.

    Poi ho provato a fare una seconda classe "vettMagazzino" in cui, per ora, ho un vettore di oggetti di tipo Magazzino.

    Questa classe e il relativo costruttore li ho fatti così:

    Codice PHP:
    class vettMagazzino 
    public 
    $magazzini = array(); 

    public function 
    __construct() { 
    $ogg_query= new DoQuery(); 
    $query"select * from Magazzini"
    $risultato=mysql_query($querymysql_connect("localhost","root","") ); 

    while (
    $row mysql_fetch_array($risultatoMYSQL_NUM)) { 
       
    $magazzini[]= new Magazzino($row[1]); } 

    Fin qui sembra tutto ok.
    L'ultima riga richiama il costruttore di Magazzino che in base al secondo elemento preso dalla query riempe i campi capienza e indirizzo.

    Ora vorrei implementare un metodo nella classe vettMagazzino che mostri un attributo del magazzino. Ho provato a fare così:


    Codice PHP:
    public function showMagazzino() { 
    $i=0
    while (
    $i<2) { 
    print 
    "<tr>"
    print 
    " <td> ".$this->magazzini[$i]->getCapienza() ."</td>"
    print 
    "</tr>"
    e mi da questo errore:
    codice:
    Fatal error: Call to a member function getCapienza() on a non-object in C:\... on line 26
    Perchè i magazzini presenti nell'array non sono visti come oggetti?
    Grazie!

  2. #2
    Principalmente perche' nel costruttore usi $magazzini invece di $this->magazzini, poi magari c'e' anche altro.

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Ma perché invece di complicarti inutilmente la vita con una classe che rappresenti un vettore di altre classi non usi direttamente un array?

    Codice PHP:
    $magazzini = array();

    $magazzini[] = new Magazzino($row[1]);

    foreach(
    $magazzini as $magazzino)
    {
        echo 
    "<tr><td>".$magazzino->getCapienza()."</td></tr>";

    Ma c'è una cosa che non capisco: la classe Magazzino ha 2 attibuti, tu al costruttore passi solo un valore, come valorizza entrambi gli attributi?

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    165
    Originariamente inviato da k.b
    Principalmente perche' nel costruttore usi $magazzini invece di $this->magazzini, poi magari c'e' anche altro.
    che idiota!!! E' vero!

    Grazie mille! Ora funziona!

    @Alhazred
    Se ho capito bene cosa hai proposto volevi utilizzare un semplice array di oggetti e poi utilizzare quello senza voler fare un'altra classe?
    In questo caso: ho dovuto fare una classe perchè poi dovevo creare dei metodi per fare delle operazioni sul vettore e non mi andava di farlo con funzione apparentemente slegate tra loro.

    Per quanto riguarda la funzione che con un parametro riempe due campi... è solo per l'inizializzazione! Poi vengono riempiti dall'utente in maniera "umana". Purtroppo è una cavolata che ha fatto un collega... ma non posso dirglielo!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.