Acessando atributos privados de um objeto em PHP

at 18/07/2008
tagged as #PHP
Pedro Mendes

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...

blog comments powered by Disqus

I've read and recommend

//]]>