www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Traits no PHP 5.4:
muito além da herança
@fgsl
F...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Quem sou eu
2
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Quem sou eu
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Quem sou eu
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Quem sou eu
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Quem sou eu
"Você não pode prever todas as
conse...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Quem sou eu
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Especialista em história em
quadrinhos http://pe...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Não seria maravilhoso se existisse uma maneira d...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Princípio de Design
“Identifique os aspectos de ...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Resumo
Esta palestra mostra como traits resolvem...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Tudo começou aqui
European Conference on
Object-...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Paper
Traits: “unidades de comportamento
que pod...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Fato: “A herança é o mecanismo de
reuso fundamen...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Fato: “Todas as variantes de herança
sofrem de p...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Fato: “A herança é um mecanismo com
muitos signi...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
A programação de computadores se
apropria de ter...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Seria a herança genética?
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Na herança genética, cada filho
recebe uma combi...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Existem dois tipos de herança na
programação ori...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Esses dois tipos são determinísticos
● Em ambos ...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
A herança em orientação a objetos
seria um testa...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Mas esta não é a
herança simples
da orientação a...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Nem esta:
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
O problema com a analogia do
testamento, é que n...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
A herança simples da
orientação a objetos, então...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Na herança simples, várias classes
podem reutili...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Herança simples e código duplicado
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Nem pense nisso!
Criar dependências implica
em d...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Na arquitetura do software é
necessário encontra...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
E a herança múltipla?
Animal
Cavalo Pássaro
Péga...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Seria isto?
Animal
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Seria isto?
Animal
NÃO!
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Seria mais parecido com isso:
Homem
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
“A herança múltipla é boa, mas não
há um bom mod...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Ah, mas eu posso usar interfaces...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Sim, mas interfaces não tem
implementação. O pro...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Existe um problema:
o Diamante da Morte
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Problema do Diamante
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Problema do Diamante
Conflito de nomes:
Se exist...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Problema do Diamante
Implementação:
Se um método...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Herança múltipla não é genética...
Herança múlti...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Composição de classes é um
paliativo
Você pode c...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Composição de classes é um
paliativo
<?php
names...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Composição de classes é um
paliativo
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Composição de classes é um
paliativo
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Paradoxo da Herança de Classes
Uma classe tem um...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Separação de papéis
Se a classe deve ser a gerad...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Traits
►Um trait provê um conjunto de métodos qu...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Classes e Verbos
►Herança de classe: Ser
►Compos...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Declarando um trait em PHP
trait GenericTrait
{
...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Usando um trait em PHP
class ClassC
{
use Specia...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Usando vários traits em PHP
class Amazo
{
use Aq...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Sobrescrevendo um trait em PHP
class ClassB
{
us...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Resolução de conflitos
trait Fifer
{
public func...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Resolução de conflitos
trait Fiddler
{
public fu...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Resolução de conflitos
trait Practical
{
public ...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Resolução de conflitos
class PerfectPig
{
use Fi...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Resolução de conflitos
class PerfectPig
{
use Fi...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Resolução de conflitos
class PerfectPig
{
use Fi...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Trait > (Interface + Implementação)
● Uma classe...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Traits suportam atributos
● Você pode definir at...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Traits podem usar variáveis
estáticas
● Só não p...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Classes podem alterar a visibilidade
de métodos ...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Traits podem declarar métodos
abstratos
● Dessa ...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Traits podem usar traits
● Métodos públicos pode...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Existem funções para Traits
● class_uses: retorn...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
http://www.treinaweb.com.br
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
É isso aí, pessoal!
● www.fgsl.eti.br
● flavio.l...
www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
Referências
● Schärli, N. et alli. Traits: Compo...
Próximos SlideShares
Carregando em…5
×

Seminário PHP São Paulo 2013 - traits no PHP 5.4 - muito além da herança

533 visualizações

Publicada em

0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
533
No SlideShare
0
A partir de incorporações
0
Número de incorporações
1
Ações
Compartilhamentos
0
Downloads
4
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Seminário PHP São Paulo 2013 - traits no PHP 5.4 - muito além da herança

  1. 1. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Traits no PHP 5.4: muito além da herança @fgsl Flávio Gomes da Silva Lisboa
  2. 2. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Quem sou eu 2
  3. 3. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Quem sou eu
  4. 4. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Quem sou eu
  5. 5. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Quem sou eu
  6. 6. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Quem sou eu "Você não pode prever todas as conseqüências de suas ações - Mas isso não é desculpa para não fazer nada" Hal Jordan - Lanterna Verde do setor 2814.
  7. 7. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Quem sou eu
  8. 8. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Especialista em história em quadrinhos http://perse.doneit.com.br romocavaleirodoespaco.blogspot.com
  9. 9. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Não seria maravilhoso se existisse uma maneira de criar um software de modo que quando precisássemos alterá-lo, pudéssemos fazer isso com o menor impacto possível no código existente? Poderíamos perder menos tempo retrabalhando o código e mais tempo para permitir que o programa faça coisas mais legais...
  10. 10. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Princípio de Design “Identifique os aspectos de seu aplicativo que variam e separe-os do que permanece igual”. Eric e Elisabeth Freeman
  11. 11. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Resumo Esta palestra mostra como traits resolvem um problema relativo à limitação do reuso por herança em orientação a objetos e como são implementados no PHP 5.4.
  12. 12. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Tudo começou aqui European Conference on Object-Oriented Programming
  13. 13. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Paper Traits: “unidades de comportamento que podem compor algo” Schärli, Ducasse, Nierstraz e Black
  14. 14. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Fato: “A herança é o mecanismo de reuso fundamental nas linguagens de programação orientadas a objetos”
  15. 15. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Fato: “Todas as variantes de herança sofrem de problemas conceituais e práticos”
  16. 16. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Fato: “A herança é um mecanismo com muitos significados e interpretações conflitantes”
  17. 17. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. A programação de computadores se apropria de termos de outras áreas de conhecimento fazendo analogias
  18. 18. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl.
  19. 19. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Seria a herança genética?
  20. 20. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Na herança genética, cada filho recebe uma combinação de características do pai e da mãe... e isso é naturalmente probabilístico
  21. 21. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Existem dois tipos de herança na programação orientada a objetos ● Simples: uma classe herda TODAS as características herdáveis de outra ● Múltipla: uma classe herda TODAS as características herdáveis de mais de uma classe.
  22. 22. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Esses dois tipos são determinísticos ● Em ambos os tipos, existe uma forma de dizer o que será ou não herdado, que é o escopo de visibilidade de atributos e métodos.
  23. 23. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. A herança em orientação a objetos seria um testamento, em que as classes pais transmitem todos os seus bens (atributos e métodos) para as classes filhas?
  24. 24. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Mas esta não é a herança simples da orientação a objetos
  25. 25. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Nem esta:
  26. 26. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. O problema com a analogia do testamento, é que nesse caso cada herdeiro leva uma parte da herança. E não é isso que acontece com a orientação a objetos, na qual a cada classe filha leva toda a herança.
  27. 27. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. A herança simples da orientação a objetos, então, é esta:
  28. 28. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Na herança simples, várias classes podem reutilizar atributos e métodos de uma classe ancestral. Mas o reuso não é pleno, já que, por herdar de apenas uma classe, você pode acabar “copiando” atributos e métodos de outra classe, gerando código duplicado. E o código duplicado é mutante: você não tem um controle fácil sobre implementações.
  29. 29. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Herança simples e código duplicado
  30. 30. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Nem pense nisso! Criar dependências implica em diminuir a flexibilidade
  31. 31. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Na arquitetura do software é necessário encontrar um ponto de equilíbrio entre instabilidade e abstração
  32. 32. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. E a herança múltipla? Animal Cavalo Pássaro Pégaso
  33. 33. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Seria isto? Animal
  34. 34. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Seria isto? Animal NÃO!
  35. 35. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Seria mais parecido com isso: Homem
  36. 36. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. “A herança múltipla é boa, mas não há um bom modo de fazê-la” Steve Cook A herança múltipla permitiria combinar atributos e métodos de várias classes em uma nova classe. Mas existem vários problemas decorrentes da herança múltipla... por isso PHP não a implementa.
  37. 37. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Ah, mas eu posso usar interfaces...
  38. 38. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Sim, mas interfaces não tem implementação. O problema não é padronizar a comunicação, mas reutilizar código.
  39. 39. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Existe um problema: o Diamante da Morte
  40. 40. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Problema do Diamante
  41. 41. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Problema do Diamante Conflito de nomes: Se existem atributos ou métodos com nomes iguais, mas contextos diferentes, qual deve ser herdado?
  42. 42. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Problema do Diamante Implementação: Se um método de uma classe ancestral for sobrescrito pelas classes herdadas, qual implementação será usada?
  43. 43. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Herança múltipla não é genética... Herança múltipla traz tudo de todos os pais. E nem sempre (talvez na maioria dos casos) queremos combinar tudo de todos, mas algumas coisas de todos. Não queremos gerar um clone (até porque não dá pra gerar um clone de mais de um original) mas uma combinação de traços (atributos e métodos).
  44. 44. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Composição de classes é um paliativo Você pode contornar a inexistência de herança múltipla fazendo com que uma classe contenha outra, em vez de estendê-la. Com essa abordagem, uma classe pode artificialmente herdar tanto atributos quanto métodos de múltiplas classes. Mas persiste o problema de que é tudo ou nada.
  45. 45. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Composição de classes é um paliativo <?php namespace DCComicsCharacters; class Amazo { private $decorators = array(); public function __construct() { $this->decorators[] = new Superman(); $this->decorators[] = new MartianManhunter(); } }
  46. 46. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Composição de classes é um paliativo
  47. 47. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Composição de classes é um paliativo
  48. 48. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Paradoxo da Herança de Classes Uma classe tem um papel primário de geradora de instâncias, logo ela deve ser completa. Mas como unidade de reuso, uma classe deve ser pequena, com a menor implementação possível. Isso é contraditório!
  49. 49. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Separação de papéis Se a classe deve ser a geradora de instâncias, alguém tem de assumir o papel de unidade de reuso. É aí que entram os traits. Traits são unidades primitivas de reuso de código.
  50. 50. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Traits ►Um trait provê um conjunto de métodos que implementam comportamento. ►Classes e traits podem ser compostos por outros traits. ►Métodos conflitantes devem ser explicitamente resolvidos. ►A composição com traits não afeta a semântica da classe. É como se os métodos fossem declarados nela.
  51. 51. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Classes e Verbos ►Herança de classe: Ser ►Composição de classe: Ter (ter é melhor que ser) ►Traits: Usar (usar é melhor que ter)
  52. 52. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Declarando um trait em PHP trait GenericTrait { public function doSomeSingle() { echo 'something single'; } } Traits não podem ser instanciados, apenas usados!
  53. 53. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Usando um trait em PHP class ClassC { use SpecialTrait; } Se uma classe herda um método que tem o mesmo nome de um método contido em um trait, o trait sobrescreve o método herdado. Tesoura corta papel. Trait corta classe mãe.
  54. 54. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Usando vários traits em PHP class Amazo { use Aquaman, Flash; }
  55. 55. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Sobrescrevendo um trait em PHP class ClassB { use GenericTrait; public function doSomeSingle() { echo 'Something single in fact'; } } O método da classe tem precedência sobre o trait!
  56. 56. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Resolução de conflitos trait Fifer { public function buildHouse() { echo 'building a straw house'; } }
  57. 57. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Resolução de conflitos trait Fiddler { public function buildHouse() { echo 'building a stick house'; } }
  58. 58. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Resolução de conflitos trait Practical { public function buildHouse() { echo 'building a brick house'; } }
  59. 59. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Resolução de conflitos class PerfectPig { use Fifer, Fiddler, Practical; }
  60. 60. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Resolução de conflitos class PerfectPig { use Fifer, Fiddler, Practical { Practical::buildHouse insteadof Fifer, Fiddler; } }
  61. 61. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Resolução de conflitos class PerfectPig { use Fifer, Fiddler, Practical { Practical::buildHouse insteadof Fifer, Fiddler; Fifer::buildHouse as buildShitHouse; } }
  62. 62. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Trait > (Interface + Implementação) ● Uma classe não pode implementar duas interfaces que tenham métodos com mesmo nome. ● Interfaces não suportam atributos, apenas constantes. ● Os métodos de uma interface tem de ser públicos.
  63. 63. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Traits suportam atributos ● Você pode definir atributos, inclusive estáticos, da mesma forma como faz em classes. trait StaticTrait { public static $instances; public $description; }
  64. 64. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Traits podem usar variáveis estáticas ● Só não podem defini-las. trait StaticTrait { public function $playDice() { static $side = 1; $side++; if ($side > 6) $side = 1; return $side; } }
  65. 65. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Classes podem alterar a visibilidade de métodos de traits ● Métodos públicos podem se tornar privados ou protegidos. class ClassC { use SpecialTrait { doSomeSpecial as protected; } }
  66. 66. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Traits podem declarar métodos abstratos ● Dessa forma, um trait pode também se tornar um contrato, como uma interface trait BaseTrait { public function doSomeAbstract(); }
  67. 67. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Traits podem usar traits ● Métodos públicos podem se tornar privados ou protegidos. trait OneTrait { use OtherTrait; }
  68. 68. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Existem funções para Traits ● class_uses: retorna os traits usados pela classe dada. ● get_declared_traits: retorna os array de todos os traits declarados. ● trait_exists: verifica se o trait existe.
  69. 69. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. http://www.treinaweb.com.br
  70. 70. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. É isso aí, pessoal! ● www.fgsl.eti.br ● flavio.lisboa@fgsl.eti.br ● @fgsl
  71. 71. www.fgsl.eti.br - Livre para reprodução desde que citada a fonte - @fgsl. Referências ● Schärli, N. et alli. Traits: Composable Units of Behaviour. http://scg.unibe.ch/archive/papers/Scha03aTraits.pdf ● Weldon, G. PHP 5.4: Begin your love affair with Traits. http://www.slideshare.net/predominant/php-54-begin-your- love-affair-with-traits-10118525

×