Diferenças entre objetos

Essa função retorna quais atributos são diferentes entre dois objetos, e opcionalmente você pode especificar apenas para verificar alguns desses atributos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function diff($objeto_antes, $objeto_depois, $atributos_especificos = array())
{
    $diff = array();
    foreach ($objeto_antes as $atributo => $valor) {
        if (isset($objeto_depois->$atributo)) {
            // foram especificados atributos para comparar? ...
            if (sizeof($atributos_especificos) > 0) {
                // ... o atributo atual está na lista?
                if (in_array($atributo, $atributos_especificos)) {
                    if ($objeto_depois->$atributo != $valor) {
                        $diff[] = $atributo;
                    }
                }
            } else {
                if ($objeto_depois->$atributo != $valor) {
                    $diff[] = $atributo;
                }
            }
        }
    }
 
    return $diff;
}

Post a Comment

Your email is never shared.