Your SlideShare is downloading. ×
0
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Prog web 06-php-oo
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Prog web 06-php-oo

477

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
477
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  1. Programação para WEBRegis Pires Magalhãesregispiresmag@gmail.comProgramaçãoOrientada a Objetosem PHP
  2. Classes e Objetos<?phpclass Pessoa {private $nome;function __construct($nome) {$this->nome = $nome;}function getNome() {return $this->nome;}function setNome($nome) {$this->nome = $nome;}}$p = new Pessoa(João);$q = $p;$p->setNome("Maria");echo "{$p->getNome()}<br/>";echo "{$q->getNome()}<br/>";?>
  3. Construtores No PHP 4, o construtor tinha o mesmo nome daclasse. No PHP 5, se não for encontrado o __construct(),ele procurará o construtor com o mesmo nome daclasse.
  4. Herança<?phprequire_once(pessoa.php);class PessoaFisica extends Pessoa {private $cpf;function __construct($nome,$cpf) {parent::__construct($nome);$this->cpf = $cpf;}function getCpf() {return $this->cpf;}function setCpf($cpf) {$this->cpf = $cpf;}}$pf = new PessoaFisica(Maria,123.456.789-00);echo "Nome: {$pf->getNome()}<br/>";echo "CPF: {$pf->getCpf()}<br/>";?>
  5. Sobrescrita de Métodos<?phpclass MinhaClasse {protected function minhaFuncao() {echo "MinhaClasse::minhaFuncao()n";}}class OutraClasse extends MinhaClasse {public function minhaFuncao() {parent::minhaFuncao();echo "OutraClasse::minhaFuncao()n";}}$classe = new OutraClasse();$classe->minhaFuncao();?>
  6. Sobrecarga de Construtores Em PHP cada classe somente pode ter um únicoconstrutor. Assim, não há sobrecarga de construtores:<?phpclass Pessoa {private $nome;function __construct() {}function __construct($nome) {$this->nome = $nome;}}?>Fatal error: Cannot redeclare Pessoa::__construct()
  7. autoload Pode-se definir uma função __autoload que éautomaticamente chamada caso seja usada umaclasse que ainda não foi definida. Isso pode evitar a necessidade de escrever múltiplosincludes ou requires.<?phpfunction __autoload($class_name) {require_once $class_name . .php;}$obj = new MyClass1();$obj2 = new MyClass2();?>
  8. autoload<?phpclass MinhaClasse {function helloWorld() {echo "Hello, Worldn";}}?><?phpfunction __autoload($class_name) {require_once($_SERVER["DOCUMENT_ROOT"] ."/classes/$class_name.php");}?><?phprequire_once "autoload.php";$obj = new MinhaClasse();$obj->helloWorld();?> index.phpautoload.phpMinhaClasse.php
  9. Classes e Objetos<?phpclass A {private $nome;function __construct($nome) {$this->nome = $nome;}function oi() {if (isset($this)) {echo Oi, .$this->nome.. Este objeto é instância da classe ;echo get_class($this).<br/>;} else {echo Oi, não sei o seu nome, pois o método está sendo ;echo executado estaticamente.<br/>;}}}class B {function ola() {A::oi();}}$a = new A("Maria");$a->oi();A::oi();$b = new B();$b->ola();B::ola();?>
  10. Construtores e Destrutores Construtores pais não são chamados implicitamente peloconstrutor da classe filha. Para executar o construtor da classe pai, é necessáriauma chamada a parent::__construct() noconstrutor da classe filha. O método destrutor ou finalizador será chamado assimque todas as referências a um objeto particular foremremovidas ou quando o objeto for explicitamentedestruído através da função unset() ou ainda quando oprograma é finalizado. Destrutores pais não serão chamados implicitamente.Para executar o destrutor pai, deve-se fazer umachamada explicitamente a parent::__destruct() nocorpo do destrutor.
  11. Construtores e Destrutores<?phpclass MinhaClasseDestruivel {function __construct() {print "No construtor<br/>";$this->name = "MinhaClasseDestruivel";}function __destruct() {print "Destruindo $this->name";}}$obj = new MinhaClasseDestruivel();?>
  12. Visibilidade dos membros<?phpclass MinhaClasse {public $publica = Public;protected $protegida = Protected;private $privada = Private;function imprimeAlo() {echo $this->publica;echo $this->protegida;echo $this->privada;}}$obj = new MinhaClasse();$obj->imprimeAlo();echo $obj->publica; // Funcionaecho $obj->protegida; // Erro Fatalecho $obj->privada; // Erro Fatal?>
  13. Visibilidade dos membros<?phpclass MinhaClasse {public function __construct() { }public function meuPublico() { }protected function meuProtegido() { }private function meuPrivado() { }// Se nada for dito, é publicfunction foo() {$this->meuPublico();$this->meuProtegido();$this->meuPrivado();}}$minhaclasse = new MinhaClasse;$minhaclasse->foo();$minhaclasse->meuPublico(); // Funciona$minhaclasse->meuProtegido(); // Erro Fatal$minhaclasse->meuPrivado(); // Erro Fatal?>
  14. :: Operador de Resolução de Escopo Permite acesso a membros estáticos, constantes ousobrescritos de uma classe.<?phpclass MinhaClasse {const VALOR_CONST = Um valor constante;}$classname = MinhaClasse;echo $classname::VALOR_CONST;echo MinhaClasse::VALOR_CONST;?>
  15. :: Operador de Resolução de Escopo<?phpclass OutraClasse extends MinhaClasse {public static $meu_estatico = variável estática;public static function doisPontosDuplo() {echo parent::VALOR_CONST . "n";echo self::$meu_estatico . "n";}}$classname = OutraClasse;echo $classname::doisPontosDuplo();OutraClasse::doisPontosDuplo();?> As palavras reservadas self e parent sãousadas para acessar membros de dentro dadefinição da classe.
  16. Inicializações inválidas<?phpclass SimpleClass {// declarações de membro inválidaspublic $var1 = olá .mundo;public $var2 = <<<FIMolá mundoFIM;public $var3 = 1+2;public $var4 = self::myStaticMethod();public $var5 = $myVar;}?> Variáveis , membros de classe ou chamada defunção não podem ser usados na inicializaçãodireta de atributos.
  17. Inicializações válidas<?phpclass SimpleClass {// declarações de membro válidaspublic $var6 = myConstant;public $var7 = self::classConstant;public $var8 = array(true, false);}?>
  18. Membros de Classe<?phperror_reporting(E_STRICT);class Foo {public static function umMetodoEstatico() {echo oi<br/>;}public function umMetodoNaoEstatico() {echo olá<br/>;}}Foo::umMetodoEstatico();Foo::umMetodoNaoEstatico();?> Chamar métodos não estáticos de maneiraestática gera um aviso de nível E_STRICT.
  19. Constantes Constantes diferem de variáveis normais no não usodo símbolo $ para declará-las ou usá-las.<?phpclass MinhaClasse {const constante = valor constante;function mostrarConstante() {echo self::constante . "<br/>";}}echo MinhaClasse::constante . "<br/>";$classe = new MinhaClasse();$classe->mostrarConstante();?>
  20. Classes Abstratas<?phpabstract class ClasseAbstrata {abstract protected function pegarValor();abstract protected function valorComPrefixo( $prefixo );public function imprimir() {print $this->pegarValor() . <br/>;}}class ClasseConcreta1 extends ClasseAbstrata {protected function pegarValor() {return "ClasseConcreta1";}public function valorComPrefixo( $prefixo ) {return "{$prefixo}ClasseConcreta1";}}$classe1 = new ClasseConcreta1;$classe1->imprimir();echo $classe1->valorComPrefixo(FOO_) . <br/>;?>
  21. Interfaces<?phpinterface Animal {public function emiteSom();}class Gato implements Animal {public function emiteSom() {echo Miaaauhh;}}class Cachorro implements Animal {public function emiteSom() {echo Au, Au;}}$a = new Gato();$b = new Cachorro();echo "{$a->emiteSom()}<br/>";echo "{$b->emiteSom()}<br/>";?>
  22. final Métodos final NÃO podem ser sobrescritos em classesque o herdem. Classes final não podem ser herdadas por outras classes. O exemplo abaixo não funciona:<?phpclass ClasseBase {protected $id = 0;final function getId() {return $this->id++;}}class ClasseConcreta extends ClasseBase {function getId() {return $this->id += 2;}}?>
  23. final O exemplo abaixo também não funciona:<?phpfinal class ClasseBase {// ...}class ClasseConcreta extends ClasseBase {// ...}?>
  24. O método __toString() Retorna a representação de um objeto emforma de string.<?phpclass Pessoa {private $nome;function __construct($nome) {$this->nome = $nome;}function __toString() {return $this->nome;}}$obj = new Pessoa("Maria");echo $obj;?>
  25. Clonagem de Objetos Uma cópia de objeto é criada usando ocomando clone. Isso chama o método__clone() do objeto. O método __clone() de um objeto nãopode ser executado diretamente.
  26. Clonagem de Objetos<?phpclass Fone {public $numero, $tipo;public function __construct($numero,$tipo) {$this->numero = $numero;$this->tipo = $tipo;}}class Pessoa {public $nome, $fone;public function __construct($nome,$num_fone,$tipo_fone) {$this->nome = $nome;$this->fone = new Fone($num_fone,$tipo_fone);}public function __clone() {$this->fone = new Fone($this->fone->numero, $this->fone->tipo);}}$p1 = new Pessoa(Maria,8633231845,RES);$p2 = clone $p1;echo(<p>Objeto Original:</p>); print_r($p1);echo(<p>Objeto Clonado:</p>); print_r($p2);$p2->nome = João;$p2->fone->numero = 8699811234;$p2->fone->tipo = CEL;echo(<p>Objeto Original:</p>); print_r($p1);echo(<p>Objeto Clonado:</p>); print_r($p2);?>
  27. Interceptação Chamada de métodos e acesso a membros podemser interceptados pelos métodos __set, __get e__call. __set – intercepta a atribuição de valores apropriedades do objeto (declaradas ou não). __get – intercepta requisições de propriedades doobjeto (declaradas ou não). __call – Intercepta chamadas a métodos. Executadoautomaticamente quando um método inexistente forchamado.
  28. Interceptação<?phpclass Pessoa {private $atributos;function __set($nome,$valor) {$this->atributos[$nome] = $valor;}function __get($nome) {return $this->atributos[$nome];}function __call($nome,$params) {echo "Método chamado: $nome<br/>";echo Parâmetros: ; print_r($params);}}$p1 = new Pessoa();$p1->nome = Maria;$p1->fone = 8633231234;echo Nome: . $p1->nome . <br/>;echo Fone: . $p1->fone . <br/>;print_r($p1); echo <br/>;$p1->meuMetodo(PHP,123,WEB);?>
  29. Instanciação Dinâmica<?phpclass MinhaClasse {function exibe($a,$b) {echo "Parâmetros: $a $b<br/>";}}$classe = MinhaClasse;$metodo = exibe;$obj = new $classe;call_user_func(array($obj, $metodo),PHP,WEB);?>
  30. Tratamento de Erros A forma de manipulação de erro mais simplesé abortar a execução da aplicação através dafunção die(). Controlar erros assim é geralmente ruim, poisabortar a execução do programanormalmente não é o comportamentodesejado.
  31. Geração e Tratamento de Erros A função trigger_error() gera um erro de um tipodeterminado. Tipos de erro: E_USER_ERROR Gera um erro fatal. E_USER_WARNING Gera uma advertência. E_USER_NOTICE Gera uma notificação. A função set_error_handler() define uma funçãopara tratamento de erros.
  32. Geração e Tratamento de Erros<?phpfunction trata_erros($tipo_erro,$msg,$arq,$linha) {echo $msg . <br/>;if ($tipo_erro == E_USER_ERROR) {die;}}set_error_handler(trata_erros);trigger_error(Ocorreu um erro!!!,E_USER_WARNING);echo Código executado ou não;?>
  33. Exceções Uma exceção pode ser disparada (throw), ou capturada(catch). Código rodeado de um bloco try/catch, permite a captura deexceções em potencial. Vários blocos catch podem ser usados para pegar diferentesclasses de exceções. A execução normal continuará após o último bloco catchdefinido na seqüência. Quando uma exceção é lançada, o fluxo normal de execução éinterrompido e o PHP tentará achar o primeiro bloco catchcorrespondente à exceção disparada. Se uma exceção não for capturada, um Erro Fatal serálançado com uma mensagem "Uncaught Exception ...", a nãoser que um tratador tenha sido definido comset_exception_handler().
  34. Exceções Uma exceção é um objeto da classe Exception quecontém os seguintes métodos: getMessage() - Retorna a mensagem de erro. getCode() - Retorna o código de erro. getFile() - Retorna o arquivo no qual ocorreu o erro. getLine() - Retorna a linha na qual ocorreu o erro. getTrace() - Retorna um array com as ações até o erro. getTraceAsString() - Retorna as ações em forma destring.
  35. Exceções<?phpfunction inverso($x) {if ($x == 0) {throw new Exception(Divisão por zero.);}else return 1/$x;}try {echo inverso(5) . <br/>;echo inverso(0) . <br/>;} catch (Exception $e) {echo $e->getMessage(), <br/>;}echo Fim.;?>
  36. Tratador de Exceções A função set_exception_handler() define uma funçãode tratamento de exceção padrão se uma exceção nãofor capturada em um bloco try/catch. A execução não parará depois que a função detratamento for chamada.<?phpfunction trata_excecoes($ex) {echo $ex->getMessage(),<br/>;}set_exception_handler(trata_excecoes);throw new Exception(Exceção ocorreu!!!);echo Código não executado;?>
  37. Comparação de Objetos Operador de comparação (==) Objetos são iguais se possuírem o mesmoconteúdo e forem instâncias da mesma classe. Operador de identidade (===) Objetos são idênticos se referenciam a mesmainstância de uma mesma classe.
  38. Comparação de Objetos<?phpclass Pessoa {private $nome;function __construct($nome) {$this->nome = $nome;}}$p1 = new Pessoa(Maria);$p2 = $p1;$p3 = new Pessoa(Maria);echo $p1 == $p2 - . ($p1 == $p2) . <br/>;echo $p1 == $p3 - . ($p1 == $p3) . <br/>;echo $p1 === $p2 - . ($p1 === $p2) . <br/>;echo $p1 === $p3 - . ($p1 === $p3) . <br/>;?>
  39. Comparação de Tipo<?phpclass Pessoa { }class PessoaFisica extends Pessoa { }$p1 = new PessoaFisica();var_dump($p1 instanceof Pessoa);var_dump($p1 instanceof PessoaFisica);var_dump($p1 instanceof PessoaJuridica);?> instanceof é usado para determinar se umobjeto é de uma determinada classe:

×