• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Prog web 06-php-oo
 

Prog web 06-php-oo

on

  • 688 views

 

Statistics

Views

Total Views
688
Views on SlideShare
688
Embed Views
0

Actions

Likes
1
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Prog web 06-php-oo Prog web 06-php-oo Presentation Transcript

    • Programação para WEBRegis Pires Magalhãesregispiresmag@gmail.comProgramaçãoOrientada a Objetosem PHP
    • 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/>";?>
    • 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.
    • 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/>";?>
    • 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();?>
    • 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()
    • 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();?>
    • 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
    • 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();?>
    • 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.
    • Construtores e Destrutores<?phpclass MinhaClasseDestruivel {function __construct() {print "No construtor<br/>";$this->name = "MinhaClasseDestruivel";}function __destruct() {print "Destruindo $this->name";}}$obj = new MinhaClasseDestruivel();?>
    • 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?>
    • 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?>
    • :: 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;?>
    • :: 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.
    • 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.
    • Inicializações válidas<?phpclass SimpleClass {// declarações de membro válidaspublic $var6 = myConstant;public $var7 = self::classConstant;public $var8 = array(true, false);}?>
    • 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.
    • 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();?>
    • 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/>;?>
    • 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/>";?>
    • 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;}}?>
    • final O exemplo abaixo também não funciona:<?phpfinal class ClasseBase {// ...}class ClasseConcreta extends ClasseBase {// ...}?>
    • 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;?>
    • 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.
    • 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);?>
    • 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.
    • 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);?>
    • 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);?>
    • 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.
    • 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.
    • 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;?>
    • 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().
    • 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.
    • 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.;?>
    • 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;?>
    • 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.
    • 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/>;?>
    • 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: