·
Análise de Sistemas ·
Linguagens de Programação
Envie sua pergunta para a IA e receba a resposta na hora
Recomendado para você
2
Aula 9: Cookies e Sessões em PHP
Linguagens de Programação
IFRS
9
Adicionando Listas em Documentos HTML
Linguagens de Programação
IFRS
8
Aula 14: Orientação a Objetos em PHP
Linguagens de Programação
IFRS
10
Estrutura Mínima de Tabelas em HTML
Linguagens de Programação
IFRS
3
Aula 10: Manipulação de Arquivos em PHP
Linguagens de Programação
IFRS
3
Aula 7 - Formulários em PHP
Linguagens de Programação
IFRS
6
Formulários em HTML: Estrutura e Métodos de Envio
Linguagens de Programação
IFRS
2
Aula 8 - Formulários Parte 2: Envio de E-mail e Upload de Arquivos
Linguagens de Programação
IFRS
Texto de pré-visualização
021123 2056 Orientação a Objetos em PHP Parte 2 httpswebacademicocanoasifrsedubrrcpintoIFRSphpaula14aulaoo2php 16 Orientação a Objetos em PHP Parte 2 Índice Comparação de Objetos Indução de Tipos Interfaces Métodos Mágicos Sobrecarga Comparação de Objetos Quando usar o operador de comparação variáveis objeto são comparadas de maneira simples nominalmente Duas instâncias de objetos são iguais se tem os mesmos atributos e valores e são instâncias da mesma classe Por outro lado quando usando o operador de identidade variáveis objetos são identicas se e somente se elas se referem a mesma instância da mesma classe Exemplo php function bool2strbool if bool false return FALSO else return VERDADEIRO function compareObjetoso1 o2 echo o1 o2 bool2stro1 o2 echo o1 o2 bool2stro1 o2 echo o1 o2 bool2stro1 o2 echo o1 o2 bool2stro1 o2 class Flag public flag function Flagflagtrue thisflag flag class OutraFlag public flag function OutraFlagflagtrue thisflag flag o new Flag p new Flag q o r new OutraFlag echo Duas instâncias da mesma classe compareObjetoso p echo Duas referências para a mesma instância compareObjetoso q echo Instâncias de duas classes diferentes compareObjetoso r O exemplo acima irá mostrar Duas instâncias da mesma classe o1 o2 VERDADEIRO o1 o2 FALSO o1 o2 FALSO o1 o2 VERDADEIRO Duas referências para a mesma instância o1 o2 VERDADEIRO o1 o2 FALSO o1 o2 VERDADEIRO o1 o2 FALSO Instâncias de duas classes diferentes o1 o2 FALSO o1 o2 VERDADEIRO o1 o2 FALSO o1 o2 VERDADEIRO Indução de Tipos Funções podem forçar que os parâmetros sejam objetos especificando o nome da classe no protótipo da função ou array a partir do PHP 51 Ou seja apesar de não podermos especificar os tipos dos parâmetros esperados por uma função quando eles forem primitivos podemos especificálos 021123 2056 Orientação a Objetos em PHP Parte 2 httpswebacademicocanoasifrsedubrrcpintoIFRSphpaula14aulaoo2php 26 se forem classes Exemplo php Uma classe de exemplo class MinhaClasse Uma função de teste Primeiro parâmetro deve ser um objeto do tipo OutraClasse public function testeOutraClasse outraclasse echo outraclassevar Outra função de teste Primeiro parâmetro deve ser um array public function testaarrayarray arraydeentrada printrarraydeentrada Outra classe de exemplo class OutraClasse public var Alô Mundo Não satisfazer a indução de tipo resulta em erro fatal php Uma instância de cada classe minhaclasse new MinhaClasse outraclasse new OutraClasse Erro Fatal Argumento 1 deve ser um objeto da classe OutraClasse minhaclassetestehello Erro Fatal Argumento 1 deve ser uma instância de OutraClasse foo new MinhaClasse minhaclassetestefoo Erro Fatal Argumento 1 deve ser diferente de null minhaclassetestenull Funciona Imprime Alô Mundo minhaclassetesteoutraclasse Erro Fatal Argumento 1 deve ser um array minhaclassetestaarrayuma string Funciona Imprime o array minhaclassetestaarrayarraya b c Indução de tipo também funciona com funções php Um exemplo de classe class MinhaClasse public var Alô Mundo Uma função de teste Primeiro parâmetro deve ser um objeto do tipo MinhaClasse function MinhaFuncao MinhaClasse foo echo foovar Funciona minhaclasse new MinhaClasse MinhaFuncaominhaclasse E permitindo valor NULL php Aceitando valor NULL value function teststdClass obj NULL testNULL testnew stdClass Reforçando Indução de tipo só pode ser usado com tipos objetos Indução tradicional com int e string não são suportados Interfaces Interfaces permitem a criação de código que especifica quais métodos e variáveis uma classe deve implementar sem ter que definir como esses métodos serão implementados Desta forma podemos criar requisitos que devem ser atendidos pode determinadas classes Interfaces são definidas usando a palavrachave interface da mesma maneira que uma classe comum mas sem nenhum dos métodos ter seu 021123 2056 Orientação a Objetos em PHP Parte 2 httpswebacademicocanoasifrsedubrrcpintoIFRSphpaula14aulaoo2php 36 conteúdo definido Todos os métodos declarados em uma interface devem ser public Exemplo php Declara a interface iTemplate interface iTemplate public function setVariablename var public function getHtmltemplate Implementa a interface Isso funcionará class Template implements iTemplate private vars array public function setVariablename var thisvarsname var public function getHtmltemplate foreachthisvars as name value template strreplace name value template return template Isso NÃO funcionará Fatal error Class BadTemplate contains 1 abstract methods and must therefore be declared abstract iTemplategetHtml class BadTemplate implements iTemplate private vars array public function setVariablename var thisvarsname var Interfaces também podem ser herdadas de outras interfaces php interface a public function foo interface b extends a public function bazBaz baz Isto irá funcionar class c implements b public function foo public function bazBaz baz Isto não irá funcionar e resultará em um erro fatal class d implements b public function foo public function bazFoo foo Herança múltipla também é permitida em interfaces php interface a public function foo interface b public function bar interface c extends a b public function baz class d implements c public function foo public function bar public function baz 021123 2056 Orientação a Objetos em PHP Parte 2 httpswebacademicocanoasifrsedubrrcpintoIFRSphpaula14aulaoo2php 46 Classes podem implementar mais de uma interface se assim for desejado separando cada interface com uma vírgula php interface iVoador function voaraltura interface iVeiculo function movervelocidade class CarroVoador implements iVoador iVeiculo x 0 a 0 function movervelocidade x velocidade function voaraltura a altura Constantes É possível as interfaces terem constantes Constantes de interfaces funcionam exatamente como constantes de classe Elas não podem ser sobrescritas por uma classeinterface que a herda php interface a const b Interface constant Mostra Interface constant echo ab Isto não funcionará porque não é permitido sobreescrever constantes É o mesmo conceito como em constantes de classes class b implements a const b Class constant Métodos Mágicos Os nomes de funções construct destruct call callStatic get set isset unset sleep wakeup toString invoke setstate e clone debugInfo são mágicos nas classes do PHP Você não pode ter funções com esses nomes em nenhuma de suas classes a não ser que queira a funcionalidade mágica associada com eles toString public string toString void O método toString permite que uma classe decida como se comportar quando for convertida para uma string Por exemplo o que echo obj irá mostrar Este método precisa retornar uma string senão um erro é gerado Exemplo php Declara uma classe simples class TestClass public foo public function constructfoo thisfoo foo public function toString return thisfoo class new TestClassHello echo class O exemplo acima irá imprimir Hello invoke mixed invoke O método invoke é chamado quando um script tenta chamar um objeto como uma função php class CallableClass public function invokex vardumpx obj new CallableClass obj5 021123 2056 Orientação a Objetos em PHP Parte 2 httpswebacademicocanoasifrsedubrrcpintoIFRSphpaula14aulaoo2php 56 vardumpiscallableobj O exemplo acima irá imprimir int5 booltrue Sobrecarga A sobrecarga em PHP tem uma conotação diferente de outras linguagens A sobrecarga convencional é obtida em PHP simplesmente através do uso de parâmetros opcionais não sendo necessário repetir um mesmo método com parâmetros diferentes Sobrecarga em PHP provê recursos para criar dinamicamente membros e métodos Estas entidades dinâmicas são processadas via métodos mágicos que podem existir em uma classe para vários tipos de ações Os métodos sobrecarregados são invocados quando interagem com propriedades ou métodos que não foram declarados ou não são visíveis no escopo corrente Este tipo de propriedade ou método é chamado de inacessível Todos os métodos sobrecarregados devem ser definidos como públicos Sobrecarga de Propriedades public void set string name mixed value public mixed get string name public bool isset string name public void unset string name set é executado ao se escrever dados para propriedades inacessíveis get é utilizados para ler dados de propriedades inacessíveis isset é disparado para chamar isset ou empty em propriedades inacessíveis unset é invocado quando unset é usado em propriedades inacessíveis O argumento name é o nome da propriedade com a qual se está interagindo O argumento value do método set especifica o valor para o qual a propriedade name deveria ser setada Sobrecarga de propriedades somente trabalha no contexto de objetos Estes métodos mágicos não serão disparados no contexto estático classes Portanto estes métodos não podem ser declarados static Exemplo php class PropertyTest private data array public declared 1 Sobrecarga não faz efeito aqui private hidden 2 Sobrecarga fará efeito aqui quando tentar acesso por fora da classe public function setname value echo Alterando name para value thisdataname value public function getname echo Lendo name if arraykeyexistsname thisdata return thisdataname return null public function issetname echo name está definida return issetthisdataname public function unsetname echo Apagando name unsetthisdataname public function getHidden return thishidden obj new PropertyTest obja 1 Não existe propriedade a então o método set será disparado echo obja Na tentativa de leitura o método get será disparado vardumpissetobja O método isset será disparado para testar se a existe unsetobja O método unset será disparado para apagar o valor de a vardumpissetobja echo objdeclared Acessa a propriedade declared que existe portanto não dispara nenhum método mágic echo objgetHidden O método getHidden lê a propriedade privada hidden internamente sem problema echo objhidden Não existe propriedade hidden pública portanto get é disparado O exemplo acima irá mostrar Alterando a para 1 Lendo a 1 a está definida booltrue 021123 2056 Orientação a Objetos em PHP Parte 2 httpswebacademicocanoasifrsedubrrcpintoIFRSphpaula14aulaoo2php 66 Apagando a a está definida boolfalse 1 2 Lendo hidden Sobrecarga de método public mixed call string name array arguments public static mixed callStatic string name array arguments call é disparado quando invocamos métodos inacessíveis em um contexto de objeto callStatic é disparado quando invocamos métodos inacessíveis em um contexto estático O argumento name é o nome do método sendo chamado O argumento arguments é um array enumerado contendo os parâmetros passados para o método name Exemplo php class MethodTest public function callname arguments echo Chamando método name implode arguments public static function callStaticname arguments echo Chamando método estático name implode arguments obj new MethodTest objrunTestem contexto de objeto Método runTest não existe call será disparado MethodTestrunTestem contexto estático Método estático runTest também não existe callStatic será O exemplo acima irá mostrar Chamando método runTest em contexto de objeto Chamando método estático runTest em contexto estático
Envie sua pergunta para a IA e receba a resposta na hora
Recomendado para você
2
Aula 9: Cookies e Sessões em PHP
Linguagens de Programação
IFRS
9
Adicionando Listas em Documentos HTML
Linguagens de Programação
IFRS
8
Aula 14: Orientação a Objetos em PHP
Linguagens de Programação
IFRS
10
Estrutura Mínima de Tabelas em HTML
Linguagens de Programação
IFRS
3
Aula 10: Manipulação de Arquivos em PHP
Linguagens de Programação
IFRS
3
Aula 7 - Formulários em PHP
Linguagens de Programação
IFRS
6
Formulários em HTML: Estrutura e Métodos de Envio
Linguagens de Programação
IFRS
2
Aula 8 - Formulários Parte 2: Envio de E-mail e Upload de Arquivos
Linguagens de Programação
IFRS
Texto de pré-visualização
021123 2056 Orientação a Objetos em PHP Parte 2 httpswebacademicocanoasifrsedubrrcpintoIFRSphpaula14aulaoo2php 16 Orientação a Objetos em PHP Parte 2 Índice Comparação de Objetos Indução de Tipos Interfaces Métodos Mágicos Sobrecarga Comparação de Objetos Quando usar o operador de comparação variáveis objeto são comparadas de maneira simples nominalmente Duas instâncias de objetos são iguais se tem os mesmos atributos e valores e são instâncias da mesma classe Por outro lado quando usando o operador de identidade variáveis objetos são identicas se e somente se elas se referem a mesma instância da mesma classe Exemplo php function bool2strbool if bool false return FALSO else return VERDADEIRO function compareObjetoso1 o2 echo o1 o2 bool2stro1 o2 echo o1 o2 bool2stro1 o2 echo o1 o2 bool2stro1 o2 echo o1 o2 bool2stro1 o2 class Flag public flag function Flagflagtrue thisflag flag class OutraFlag public flag function OutraFlagflagtrue thisflag flag o new Flag p new Flag q o r new OutraFlag echo Duas instâncias da mesma classe compareObjetoso p echo Duas referências para a mesma instância compareObjetoso q echo Instâncias de duas classes diferentes compareObjetoso r O exemplo acima irá mostrar Duas instâncias da mesma classe o1 o2 VERDADEIRO o1 o2 FALSO o1 o2 FALSO o1 o2 VERDADEIRO Duas referências para a mesma instância o1 o2 VERDADEIRO o1 o2 FALSO o1 o2 VERDADEIRO o1 o2 FALSO Instâncias de duas classes diferentes o1 o2 FALSO o1 o2 VERDADEIRO o1 o2 FALSO o1 o2 VERDADEIRO Indução de Tipos Funções podem forçar que os parâmetros sejam objetos especificando o nome da classe no protótipo da função ou array a partir do PHP 51 Ou seja apesar de não podermos especificar os tipos dos parâmetros esperados por uma função quando eles forem primitivos podemos especificálos 021123 2056 Orientação a Objetos em PHP Parte 2 httpswebacademicocanoasifrsedubrrcpintoIFRSphpaula14aulaoo2php 26 se forem classes Exemplo php Uma classe de exemplo class MinhaClasse Uma função de teste Primeiro parâmetro deve ser um objeto do tipo OutraClasse public function testeOutraClasse outraclasse echo outraclassevar Outra função de teste Primeiro parâmetro deve ser um array public function testaarrayarray arraydeentrada printrarraydeentrada Outra classe de exemplo class OutraClasse public var Alô Mundo Não satisfazer a indução de tipo resulta em erro fatal php Uma instância de cada classe minhaclasse new MinhaClasse outraclasse new OutraClasse Erro Fatal Argumento 1 deve ser um objeto da classe OutraClasse minhaclassetestehello Erro Fatal Argumento 1 deve ser uma instância de OutraClasse foo new MinhaClasse minhaclassetestefoo Erro Fatal Argumento 1 deve ser diferente de null minhaclassetestenull Funciona Imprime Alô Mundo minhaclassetesteoutraclasse Erro Fatal Argumento 1 deve ser um array minhaclassetestaarrayuma string Funciona Imprime o array minhaclassetestaarrayarraya b c Indução de tipo também funciona com funções php Um exemplo de classe class MinhaClasse public var Alô Mundo Uma função de teste Primeiro parâmetro deve ser um objeto do tipo MinhaClasse function MinhaFuncao MinhaClasse foo echo foovar Funciona minhaclasse new MinhaClasse MinhaFuncaominhaclasse E permitindo valor NULL php Aceitando valor NULL value function teststdClass obj NULL testNULL testnew stdClass Reforçando Indução de tipo só pode ser usado com tipos objetos Indução tradicional com int e string não são suportados Interfaces Interfaces permitem a criação de código que especifica quais métodos e variáveis uma classe deve implementar sem ter que definir como esses métodos serão implementados Desta forma podemos criar requisitos que devem ser atendidos pode determinadas classes Interfaces são definidas usando a palavrachave interface da mesma maneira que uma classe comum mas sem nenhum dos métodos ter seu 021123 2056 Orientação a Objetos em PHP Parte 2 httpswebacademicocanoasifrsedubrrcpintoIFRSphpaula14aulaoo2php 36 conteúdo definido Todos os métodos declarados em uma interface devem ser public Exemplo php Declara a interface iTemplate interface iTemplate public function setVariablename var public function getHtmltemplate Implementa a interface Isso funcionará class Template implements iTemplate private vars array public function setVariablename var thisvarsname var public function getHtmltemplate foreachthisvars as name value template strreplace name value template return template Isso NÃO funcionará Fatal error Class BadTemplate contains 1 abstract methods and must therefore be declared abstract iTemplategetHtml class BadTemplate implements iTemplate private vars array public function setVariablename var thisvarsname var Interfaces também podem ser herdadas de outras interfaces php interface a public function foo interface b extends a public function bazBaz baz Isto irá funcionar class c implements b public function foo public function bazBaz baz Isto não irá funcionar e resultará em um erro fatal class d implements b public function foo public function bazFoo foo Herança múltipla também é permitida em interfaces php interface a public function foo interface b public function bar interface c extends a b public function baz class d implements c public function foo public function bar public function baz 021123 2056 Orientação a Objetos em PHP Parte 2 httpswebacademicocanoasifrsedubrrcpintoIFRSphpaula14aulaoo2php 46 Classes podem implementar mais de uma interface se assim for desejado separando cada interface com uma vírgula php interface iVoador function voaraltura interface iVeiculo function movervelocidade class CarroVoador implements iVoador iVeiculo x 0 a 0 function movervelocidade x velocidade function voaraltura a altura Constantes É possível as interfaces terem constantes Constantes de interfaces funcionam exatamente como constantes de classe Elas não podem ser sobrescritas por uma classeinterface que a herda php interface a const b Interface constant Mostra Interface constant echo ab Isto não funcionará porque não é permitido sobreescrever constantes É o mesmo conceito como em constantes de classes class b implements a const b Class constant Métodos Mágicos Os nomes de funções construct destruct call callStatic get set isset unset sleep wakeup toString invoke setstate e clone debugInfo são mágicos nas classes do PHP Você não pode ter funções com esses nomes em nenhuma de suas classes a não ser que queira a funcionalidade mágica associada com eles toString public string toString void O método toString permite que uma classe decida como se comportar quando for convertida para uma string Por exemplo o que echo obj irá mostrar Este método precisa retornar uma string senão um erro é gerado Exemplo php Declara uma classe simples class TestClass public foo public function constructfoo thisfoo foo public function toString return thisfoo class new TestClassHello echo class O exemplo acima irá imprimir Hello invoke mixed invoke O método invoke é chamado quando um script tenta chamar um objeto como uma função php class CallableClass public function invokex vardumpx obj new CallableClass obj5 021123 2056 Orientação a Objetos em PHP Parte 2 httpswebacademicocanoasifrsedubrrcpintoIFRSphpaula14aulaoo2php 56 vardumpiscallableobj O exemplo acima irá imprimir int5 booltrue Sobrecarga A sobrecarga em PHP tem uma conotação diferente de outras linguagens A sobrecarga convencional é obtida em PHP simplesmente através do uso de parâmetros opcionais não sendo necessário repetir um mesmo método com parâmetros diferentes Sobrecarga em PHP provê recursos para criar dinamicamente membros e métodos Estas entidades dinâmicas são processadas via métodos mágicos que podem existir em uma classe para vários tipos de ações Os métodos sobrecarregados são invocados quando interagem com propriedades ou métodos que não foram declarados ou não são visíveis no escopo corrente Este tipo de propriedade ou método é chamado de inacessível Todos os métodos sobrecarregados devem ser definidos como públicos Sobrecarga de Propriedades public void set string name mixed value public mixed get string name public bool isset string name public void unset string name set é executado ao se escrever dados para propriedades inacessíveis get é utilizados para ler dados de propriedades inacessíveis isset é disparado para chamar isset ou empty em propriedades inacessíveis unset é invocado quando unset é usado em propriedades inacessíveis O argumento name é o nome da propriedade com a qual se está interagindo O argumento value do método set especifica o valor para o qual a propriedade name deveria ser setada Sobrecarga de propriedades somente trabalha no contexto de objetos Estes métodos mágicos não serão disparados no contexto estático classes Portanto estes métodos não podem ser declarados static Exemplo php class PropertyTest private data array public declared 1 Sobrecarga não faz efeito aqui private hidden 2 Sobrecarga fará efeito aqui quando tentar acesso por fora da classe public function setname value echo Alterando name para value thisdataname value public function getname echo Lendo name if arraykeyexistsname thisdata return thisdataname return null public function issetname echo name está definida return issetthisdataname public function unsetname echo Apagando name unsetthisdataname public function getHidden return thishidden obj new PropertyTest obja 1 Não existe propriedade a então o método set será disparado echo obja Na tentativa de leitura o método get será disparado vardumpissetobja O método isset será disparado para testar se a existe unsetobja O método unset será disparado para apagar o valor de a vardumpissetobja echo objdeclared Acessa a propriedade declared que existe portanto não dispara nenhum método mágic echo objgetHidden O método getHidden lê a propriedade privada hidden internamente sem problema echo objhidden Não existe propriedade hidden pública portanto get é disparado O exemplo acima irá mostrar Alterando a para 1 Lendo a 1 a está definida booltrue 021123 2056 Orientação a Objetos em PHP Parte 2 httpswebacademicocanoasifrsedubrrcpintoIFRSphpaula14aulaoo2php 66 Apagando a a está definida boolfalse 1 2 Lendo hidden Sobrecarga de método public mixed call string name array arguments public static mixed callStatic string name array arguments call é disparado quando invocamos métodos inacessíveis em um contexto de objeto callStatic é disparado quando invocamos métodos inacessíveis em um contexto estático O argumento name é o nome do método sendo chamado O argumento arguments é um array enumerado contendo os parâmetros passados para o método name Exemplo php class MethodTest public function callname arguments echo Chamando método name implode arguments public static function callStaticname arguments echo Chamando método estático name implode arguments obj new MethodTest objrunTestem contexto de objeto Método runTest não existe call será disparado MethodTestrunTestem contexto estático Método estático runTest também não existe callStatic será O exemplo acima irá mostrar Chamando método runTest em contexto de objeto Chamando método estático runTest em contexto estático