sexta-feira, 18 de julho de 2008

Acessando atributos privados de um objeto em PHP


Lendo o ultimo slideshow ( do Sebastian) sobre a OOP no PHP, no slide 28 ele mostrou inocentemente um exemplo que me deixou no mínimo curioso. Ele cria um método qualquer em uma classe, que recebe por paramentro um objeto qualquer, e então consegue trabalhar com esse objeto como se TODOS os atributos fossem publicos.

Não muito satisfeito com o exemplo do slideshow do carinha, eu realizei meus próprios testes. Eis ai os resultados:


1º - Tirando a prova real do exemplo do rapaz ( acessando um atributo privado de um outro objeto do mesmo tipo ) :


<?php

class test {

private $privateAtribute = "Atribute accessible";

public function printMe( $obj ) {


privateAtribute .= ' changed';
print $obj->privateAtribute;

}

}

$test = new test;
$test->printMe(new test);

?>



Saida: Atribute accessible changed


2º - Acessando um atributo privado do mesmo objeto


<?php


class test {


private $privateAtribute = "Atribute accessible";


public function printMe( test $obj ) {


$obj->privateAtribute .= ' changed';

print $obj->privateAtribute;


}

}


$test = new test;
$test->printMe($test);


?>



Saida: Atribute accessible changed


3º - Acessando um atributo privado de um outro objeto de tipo diferente


<?php

class testA {

private $privateAtribute = "Type A - Atribute accessible";

}

class testB {

private $privateAtribute = "Type B - Atribute accessible";

public function printMe( $obj ) {

print $obj->privateAtribute;

}

}

$test = new testB;
$test->printMe(new testA);

?>


Saida: Fatal error: Cannot access private property testA::$privateAtribute in C:xampphtdocstestindex.php on line 15


Por fim, ele só lançou erro quando os objetos eram de tipos diferentes. Vendo alguns testes que o dx7lab fez aqui na 3jane, vi que em Java a coisa funciona do mesmo jeito. Eu hein...

Nenhum comentário: