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:
Postar um comentário