Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Cr4ckz!
    Registrato dal
    Aug 2003
    Messaggi
    163

    problema array di oggetti in php

    Ciao a tutti, è la prima volta che provo a programmare ad oggetti in PHP e quindi ho qualche dubbio/problema di sintassi.

    Vi spiego quello che vorrei fare:

    - mentre scansiono il result di una query fatta a mySQL ho bisogno di creare un oggetto dello stesso tipo per ogni riga del result e, subito dopo averlo creato, inserirlo in un array di oggetti di quel tipo.

    Il problema più grosso ora è: come faccio a dichiarare in PHP un array di oggetti senza però dargli una dimensione al momento della dichiarazione (a priori non posso sapere quanti oggetti devo inserire nell'array)?

    grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    in php non hai bisogno di determinare immediatamente il numero di elementi pe run arrray.

    Codice PHP:
    $arr=array(); // creo l'array

    $arr[]='pippo'// primo elemento
    $arr[]='pluto'// secondo elemento

    ... 
    finoa raggiungere il amx della memoria disponibile

    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  3. #3
    Utente di HTML.it L'avatar di Cr4ckz!
    Registrato dal
    Aug 2003
    Messaggi
    163
    Grazie mille per la risposta dottwatson.
    In effetti dopo un po di problemi/prove ho capito un minimo come funziona
    Ma ora si presenta un altro problema e non ne capisco proprio il motivo

    In pratica ho bisogno di creare un array di oggetti e poi ordinare questo array a seconda di un paramentro contenuto nell'oggetto:

    questo è il pezzo di codice in cui creo l'array e poi lo ordino
    Codice PHP:
    $listaEventi = array();
        while (
    $riga mysql_fetch_array($result)){
            if(
    $userAgent == "java"){
                
    $listaEventi[] = new Evento($riga['idEvento'],$riga['titolo'],$riga['descrizione'],$riga['categoria'],$riga['cordx'],$riga['cordy'],$riga['indirizzo'],$categoria,$_GET['cordx'],$_GET['cordy']);
            }else
                
    $listaEventi[] = new Evento($riga['idEvento'],$riga['titolo'],$riga['descrizione'],$riga['categoria'],$riga['cordx'],$riga['cordy'],$riga['indirizzo'],$categoria,0,0);
        }
        
        if(
    $userAgent == "java"){
            
    //ordinamento in base alla distanza
            
    for($i 0$i<count($listaEventi) - 1$i++){
                
    //più piccolo elemento
                
    $min $i;
                for(
    $j=$i+1$j<count($listaEventi); $j++){
                    if (
    $listaEventi[$j]->getDistanza() < $listaEventi[$min]->getDistanza())
                        
    $min $j;
                }
                
    // scambia gli elementi i e jmin
                
    $obj $listaEventi[$min];
                
    $listaEventi[$min] = $listaEventi[$i];
                
    $listaEventi[$i] = $obj;            
            } 
    Classe Evento:
    Codice PHP:
    <?php
        
    class Evento{
            public 
    $idmappa;
            public 
    $colore;
            public 
    $idEvento;
            public 
    $categoria;
            public 
    $titolo;
            public 
    $descrizione;
            public 
    $cordx;
            public 
    $cordy;
            public 
    $indirizzo;
            
            public 
    $distanza;
            public 
    $cordx_iniziale;
            public 
    $cordy_iniziale;
        }
        
        function 
    __construct($idev,$tit,$descr,$cat,$x,$y,$indir,$cat,$xi,$yi){
            
    $this->idEvento $idev;
            
    $this->titolo $tit;
            
    $this->descrizione $descr;
            
    $this->categoria $cat;
            
    $this->cordx $x;
            
    $this->cordy $y;
            
    $this->indirizzo $indir;
            
    $this->categoria $cat;
            
            
    $this->cordx_iniziale $xi;
            
    $this->cordy_iniziale $yi;
            
            
    $this->distanza setDistanza($this->cordy$this->cordx$this->cordy_iniziale$this->cordx_iniziale);
        }
        
        function 
    setDistanza($lat1$lon1$lat2$lon2){
            
    $theta $lon1 $lon2
            
    $dist sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); 
            
    $dist acos($dist); 
            
    $dist rad2deg($dist); 
            
    $miles $dist 60 1.1515;

            return (
    $miles 1.609344); 
        }
        
        function 
    getDistanza(){
            return 
    $this->distanza;
        }
    ?>
    l'errore che ricevo è il seguente:
    Fatal error: Call to undefined method Evento::getDistanza() in C:\Users\Spr1gg4N\Documents\www\eventi.php on line 85

    non capisco come mai non riesca a richiamare quel metodo.
    Inoltre se faccio una print_r($listaEventi) mi restituisce la stampa di tutti gli elementi dell'array, con i relativi campi ma senza i valori dei campi:

    Codice PHP:
    Array ( [0] => Evento Object ( [idmappa] => [colore] => [idEvento] => [categoria] => [titolo] => [descrizione] => [cordx] => [cordy] => [indirizzo] => [distanza] => [cordx_iniziale] => [cordy_iniziale] => ) [1] => Evento Object ( [idmappa] => [colore] => [idEvento] => [categoria] => [titolo] => [descrizione] => [cordx] => [cordy] => [indirizzo] => [distanza] => [cordx_iniziale] => [cordy_iniziale] => ) [2] => Evento Object ( [idmappa] => [colore] => [idEvento] => [categoria] => [titolo] => [descrizione] => [cordx] => [cordy] => [indirizzo] => [distanza] => [cordx_iniziale] => [cordy_iniziale] => ) [3] => Evento Object ( [idmappa] => [colore] => [idEvento] => [categoria] => [titolo] => [descrizione] => [cordx] => [cordy] => [indirizzo] => [distanza] => [cordx_iniziale] => [cordy_iniziale] => ) [4] => Evento Object ( [idmappa] => [colore] => [idEvento] => [categoria] => [titolo] => [descrizione] => [cordx] => [cordy] => [indirizzo] => [distanza] => [cordx_iniziale] => [cordy_iniziale] => ) [5] => Evento Object ( [idmappa] => [colore] => [idEvento] => [categoria] => [titolo] => [descrizione] => [cordx] => [cordy] => [indirizzo] => [distanza] => [cordx_iniziale] => [cordy_iniziale] => ) ) 
    non capisco :master:

  4. #4
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    nella classe

    Codice PHP:
       function __construct($idev,$tit,$descr,$cat,$x,$y,$indir,$cat,$xi,$yi){
            
    $this->idEvento $idev;
            
    $this->titolo $tit;
            
    $this->descrizione $descr;
            
    $this->categoria $cat;
            
    $this->cordx $x;
            
    $this->cordy $y;
            
    $this->indirizzo $indir;
            
    $this->categoria $cat;
            
            
    $this->cordx_iniziale $xi;
            
    $this->cordy_iniziale $yi;
            
            
    $this->distanza setDistanza($this->cordy$this->cordx$this->cordy_iniziale$this->cordx_iniziale);
        } 
    è errata la chiamata al metodo... chiamando solo setDistanza(bla,bla,bla) lui cerca una funzione generica chiamata setDistanza, e non il suo motodo.

    cambia questa riga

    Codice PHP:
    $this->distanza setDistanza($this->cordy$this->cordx$this->cordy_iniziale$this->cordx_iniziale); 
    in

    Codice PHP:
    $this->distanza $this->setDistanza($this->cordy$this->cordx$this->cordy_iniziale$this->cordx_iniziale); 
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

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 © 2024 vBulletin Solutions, Inc. All rights reserved.