Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 30

Discussione: Confronto oggetti php5

  1. #1

    Confronto oggetti php5

    Ciao a tutti, sto cercando un modo per confrontare due oggetti in php 5.

    Allora ho visto che l'operazione '==' confronta se sono dello stesso tipo (anche ereditato) mentre '===' confronta se sono identici(con lo stesso indirizzo in memoria).

    Io invece ho bisogno di confrontare due oggetti distinti della stessa classe cioè controllare che i due oggetti rappresentano due istanze di una classe nello stesso stato, un po' come in Java c'è il metodo equals insomma un confronto bit a bit.

    Oppure anche una cosa basata tipo su hashcode della classe, ho trovato la funzione spl_object_hash ma non so se fa al caso mio.

    Esiste una cosa del genere??
    Coltiva Linux, Windows si pianta da solo!

  2. #2
    Un metodo potrebbe essere implementare __toString().
    In alternativa, utilizzare get_class_vars() per confrontare automaticamente i valori delle proprietà dei due oggetti.

  3. #3
    Purtroppo hai le mie stesse idee, __toString non va bene perchè dovrei implementarlo in ogni classe e con le classi di php native non posso farlo mentre per get_class_vars() riesco ad accedere solo alle variabili public.
    Va bene che php ancora non è un gran linguaggio OOP ma ci sarà pure un modo.
    Coltiva Linux, Windows si pianta da solo!

  4. #4
    se cho capito bene vuoi sapere se due instanze di una classe hanno le proprietà valorizzate nello stesso modo?

  5. #5
    Originariamente inviato da loHacker
    Purtroppo hai le mie stesse idee, __toString non va bene perchè dovrei implementarlo in ogni classe e con le classi di php native non posso farlo mentre per get_class_vars() riesco ad accedere solo alle variabili public.
    Questo è un'accrocchio dei peggiori:

    Codice PHP:
    <pre>
    <?php 

    class Object {

        function 
    IsEqual($object) {
        
            if (
    get_class($this) !== get_class($object)) {
                return 
    false;
            }

            
    $p1 $this->Properties(); 
            
    $p2 $object->Properties(); 
            
            foreach (
    $p1 as $name => $value) {
                if (
    $p2[$name] !== $value) {
                    return 
    false;
                }
            }
            return 
    true;
        }
        
    }

    class 
    Test extends Object {

        private 
    $test null;
        
        function 
    SetTest($value) {
            
    $this->test $value;
        }
        
        function 
    Properties() {
            return 
    get_object_vars($this);
        }
            
    }

    $A = new Test();
    $A->SetTest('A');

    $B = new Test();
    $B->SetTest('B');

    var_dump($A->IsEqual($B));

    $B->SetTest('A');
    var_dump($A->IsEqual($B));
    ?>
    </pre>
    In alternativa, probabilmente qualcosa di meglio si può ottenere attraverso la reflection:

    http://www.php.net/manual/en/languag...reflection.php

  6. #6
    Ho provato un po' con le reflection in particolare con:
    Codice PHP:
    //$o è un oggetto con variabili private
    $rf = new ReflectionObject($o);
    $props $rf->getProperties();
    foreach (
    $props as $prop) {
        
    var_dump($prop->getValue());

    Non posso comunque accedere ai valori delle variabili private perchè mi da errore:
    Cannot access non-public member Foo:rivVar
    Coltiva Linux, Windows si pianta da solo!

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398
    Una soluzione semplice potrebbe essere quella di serializzare le due istanze degli oggetti
    e fare un confronto sul risultato.

    http://it2.php.net/serialize

  8. #8
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,509

    Re: Confronto oggetti php5

    Originariamente inviato da loHacker
    Ciao a tutti, sto cercando un modo per confrontare due oggetti in php 5.

    Allora ho visto che l'operazione '==' confronta se sono dello stesso tipo (anche ereditato) mentre '===' confronta se sono identici(con lo stesso indirizzo in memoria).

    Io invece ho bisogno di confrontare due oggetti distinti della stessa classe cioè controllare che i due oggetti rappresentano due istanze di una classe nello stesso stato, un po' come in Java c'è il metodo equals insomma un confronto bit a bit.

    Oppure anche una cosa basata tipo su hashcode della classe, ho trovato la funzione spl_object_hash ma non so se fa al caso mio.

    Esiste una cosa del genere??
    se devi vedere solo se appartengono alla stessa classe, ed usi php 5 guarda qui
    http://it.php.net/manual/en/language.operators.type.php
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  9. #9
    No, io ho bisogno di confrontare due oggetti che siano della stessa classe e anche che i membri abbiano lo stesso valore.
    Coltiva Linux, Windows si pianta da solo!

  10. #10
    Originariamente inviato da andreamk
    Una soluzione semplice potrebbe essere quella di serializzare le due istanze degli oggetti
    e fare un confronto sul risultato.

    http://it2.php.net/serialize
    Grazie, sembra funzionare!!
    Coltiva Linux, Windows si pianta da solo!

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.