Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    Delucidazione inizializzazione oggetto

    Buongiorno a tutti, c'è una questione che mi confonde e non riesco a spiegarmi.

    Vi riporto un esempio così forse riesco a spiegarmi meglio:

    codice:
    public function GetUser(){
    			$returned = $this->d_provider->GetUser();
    			if($returned != null){
    				$outputVal = Array();
    				for($index=0; $index<count($returned); $index++){
    					$base = $returned[$index];
    					
    					$__user->IdUtente 		= $base["IdUtente"];
    					$__user->email 			= $base["email"];
    					$__user->nome 			= $base["nome"];
    					$__user->cognome 		= $base["cognome"];
    					$__user->citta 			= $base["citta"];
    
                                             array_push($outputVal,$__user);
    				}
    				return $outputVal;
    			}else{
    				return 0;
    			}
    		}
    Questo esempio in poche parole preleva delle informazioni da una base dati e restituisce un array di oggetti di tipo $__user; ora la cosa che non mi spiego è la seguente:

    Come fa l'interprete php a comprendere che $__user è un oggetto di cUtente (questa è la classe) se io non gli inizializzo tale oggetto? Questa funzione così com'è funziona alla perfezione ma se io mettessi subito dopo il for l'istruzione
    codice:
    $__user = new cUtente();
    mi restituisce un array vuoto
    klamis.it Il primo socialnetwork per chi ama le figurine

  2. #2
    Perchè vuoi inizializzare l'oggetto dopo il for?
    Dovresti farlo prima. Altrimenti nel tuo array non ci saranno tanti oggetti di tipo cUtente, ma ci sarà un oggetto stdClass, ovvero una classe standard.
    Quindi sembra a te che funzioni, ma in realtà gli oggetti che ti ritrovi sono di tipo stdClass e non di tipo cUtente.
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

  3. #3
    Ma il problema è che pur inizializzando l'oggetto prima del for la funzione mi restituisce un array vuoto. La funzione restituisce i risultati attesi e cioè un array di oggetti di tipo cUtente solo se non inizializzo l'oggetto $__user.
    Si comportano così anche altre funzioni all'interno del mio progetto, volevo capirne il motivo.
    Da quel che ne so io in tutti i linguaggi che supportano OOP è necessario inizializzare un oggetto per poter accedere a metodi o parametri di quell'oggetto.
    klamis.it Il primo socialnetwork per chi ama le figurine

  4. #4
    A rigor di logica l'oggetto andrebbe inizializzato dentro il ciclo for, se il tuo obiettivo è avere un array di oggetti vuol dire che ad ogni iterazione tu devi creare un oggetto di tipo cUser, valorizzarlo ed inserirlo nell'array...

  5. #5
    Ecco perchè nel primo post ho scritto che inizializzavo l'oggetto all'interno del for.
    La mia prima versione di quella funzione aveva questo ciclo for:

    codice:
    $outputVal = Array();
    				for($index=0; $index<count($returned); $index++){
    					$base = $returned[$index];
    					$__user = new cUtente();
    					$__user->IdUtente 		= $base["IdUtente"];
    					$__user->email 			= $base["email"];
    					$__user->nome 			= $base["nome"];
    					$__user->cognome 		= $base["cognome"];
    					$__user->citta 			= $base["citta"];
    
                                             array_push($outputVal,$__user);
                                            unset($__user);
    				}
    				return $outputVal;
    Scusate l'indentazione del codice :S
    klamis.it Il primo socialnetwork per chi ama le figurine

  6. #6
    Pienamente d'accordo con albx87, quindi il tuo codice diventerebbe


    Codice PHP:
    <?php
    for($index 0$index count($returned); $index ++) {
        
    $base $returned [$index];
        
    $__user = new cUtente();
        
        
    $__user->IdUtente $base ["IdUtente"];
        
    $__user->email $base ["email"];
        
    $__user->nome $base ["nome"];
        
    $__user->cognome $base ["cognome"];
        
    $__user->citta $base ["citta"];
        
        
    array_push($outputVal,$__user);
    }
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

  7. #7
    allora non ho capito...avevo capito che l'oggetto lo volevi inizializzare dopo il ciclo for.

    A rigor di logica così mi sembra corretto....se fai così dici che ti ritorna un array vuoto?!

  8. #8
    Si, io inizialmente inizializzavo l'oggetto dopo il for, eseguivo le operazioni che vedete nel codice, effettuavo il push dell'oggetto nell'array da restituire.
    A rigor di logica è corretto ma così mi restituisce un array vuoto.

    Se tolgo l'inizializzazione dell'oggetto funge tutto alla perfezione, il che mi sta bene, ma volevo approfondire questa cosa perchè ne converrete con me che è strana no?
    klamis.it Il primo socialnetwork per chi ama le figurine

  9. #9
    Bah...mi sembra strana come cosa....tra l'altro non sono sicuro che ti serva l'unset qui (io almeno non lo metterei visto che la variabile viene comunque sovrascritta ad ogni iterazione )

    array_push($outputVal,$__user);
    unset($__user);

  10. #10
    Bah...mi sembra strana come cosa....tra l'altro non sono sicuro che ti serva l'unset qui (io almeno non lo metterei visto che la variabile viene comunque sovrascritta ad ogni iterazione )

    array_push($outputVal,$__user);
    unset($__user);
    Hai provato a mettere un var_dump ad ogni iterazione per vedere se la variabile viene valorizzata ed inserita correttamente nell'array?!

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.