PHP

Desenvolvimento de Aplicativos Web - COLTEC/MG

PHP

João Eduardo Montandon

Desenvolvimento de Aplicativos Web - COLTEC/MG

PHP: Introdução

Desenvolvida por Rasmus Lerdorf em 1995: "PHP/FI (Personal Home Page/ Forms Interpreter)".

Hoje: "PHP: Hypertext Processing".

Linguagem de Programação voltada para desenvolvimento de páginas dinâmicas na Internet.

PHP: Introdução

Principais características:

PHP: Instalação

Para desenvolver uma página utilizando PHP, são necessários os seguintes softwares:

  1. PHP
  2. Apache
  3. Banco de Dados: MySQL ou PostgreSQL

Instalação: The Hard Way

  1. Baixar, instalar e configurar interpretador de PHP link
  2. Baixar, instalar e configurar o servidor Apache link
  3. Baixar, instalar e configurar o banco de dados (MySQL ou PostgreSQL)

Instalação: The Easy Way

Baixar e instalar um bundle de desenvolvimento

PHP: Hello, Script

            
<html>
  <body>
    <?php
      $now = date("d/m/Y", time());
      echo "Olá, Terráqueo. Agora são: ";
    ?>
  </body>
</html>
            
          

PHP: Hello, Script

            
<html>
  <body>
    <?php
      $now = date("d/m/Y", time());
      echo "Olá, Terráqueo. Agora são: $now";
    ?>
  </body>
</html>
            
          

<?php ?> Delimita código PHP.

$now = ... Cria uma variável chamada now.

echo "..." Imprime algo na tela.

PHP: Tipos de dados

PHP possui quatro tipos de dados:

PHP: Tipo numérico

Representa qualquer valo numérico, podendo ser inteiro ou real

          
$inteiro = 10;
$real = 3.14;
$hexa = 0x0b;
          
        

PHP: Tipo String

Representa uma sequencia alfanumérica, podendo ser fornecida por meio de aspas duplas (") ou simples(')

          
echo "Olá, $nome";
echo 'Olá, $nome';
          
        

Sidebar: Aspas Invertidas

As aspas invertidas (`) permitem que o PHP execute comandos do sistema operacional

          
<?php
  echo `ls -la`;
?>
          
        

PHP: Tipo Array

Os vetores (arrays) são variáveis capazes de armazenar mais de um valor ao mesmo tempo.

A notação utilizada por PHP é a mesma utilizada por Java ([ ])

Os índices podem ser definidos tanto por valores númericos e strings.

PHP: Tipo Array

          
$vetor[0] = 30;
$vetor[1] = 40;
$vetor[2] = 50;
$vetor[3] = 60;
          
        

PHP: Tipo Array

É possível inserir valores no array sem que seja necessário fornecer um índice.

Neste caso, o PHP irá inserir este elemento no final do array.

          $vet[ ] = "Cruzeiro";
$vet[ ] = "bi campeão";
echo "o $vet[0] é $vet[1] da américa!!";
          
        

PHP: Tipo Object

PHP também possui suporte a classes e objetos

          class Pessoa {
  function saudacao() {
    echo "Olá pessoal!!";
  }
}
$jose = new Pessoa;
jose->saudacao();
          
        

PHP: Constantes

Valores predefinidos no início do programa. Em PHP, constantes podem ser case-insensitive.

          bool define(string nome, object valor [, bool case_insensitive]);
          
        
          define ("PI", 3.14, false);
echo "O valor de PI é " . PI;
          
        

PHP: Variáveis

As variáveis em PHP são identificadas por meio do símbolo $

Variáveis: Escopo

Uma variável pode ser local ou global

Variáveis: Escopo global

Podemos acessar variáveis de escopo global de duas formas

PHP: Variáveis

            
$num = 5000;
function escopo() {
  global $num;
  $num += 5;
  echo $num . "<br>";
}
echo $num . "<br>";
escopo();
            
          
            
$num = 5000;
function escopo() {
  GLOBALS["num"] += 5;
  echo GLOBALS["num"] . "<br>";
}
echo $num . "<br>";
escopo();
            
          

PHP: Conversão de valores

Conversor Descrição
(int), (integer) Converte para inteiro.
(real), (float), (double) Converte para ponto flutuante
(string) Converte para string
(array) Converte para array
(object) Converte para object

PHP: Operadores Aritméticos

          
            $a = a + 1; // adição
            $a = a * 5; // multiplicação
            $a = a / 3; // divisão
            $a = a - 1; // subtração
            $a = a % 1; // resto
            echo "$a++"; // Pós-incremento
            echo "++$a"; // Pré-incremento
            echo "$a--"; // Pós-decremento
            echo "--$a"; // Pré-decremento
          
        

PHP: Operadores Binários

Operador Descrição
~$var Inverte os bits de $var
$var1 & $var2 AND bit a bit
$var1 | $var2 OR bit a bit
$var1 ^ $var2 XOR bit a bit
$var >> N Deslocamento de N bits à direita
$var << N Deslocamento de N bit à esquerda

PHP: Operadores de Comparação

Operador Descrição
$var1 == $var2 $var1 igual a $var2
$var1 >= $var2 $var1 maior ou igual a $var2
$var1 <= $var2 $var1 menor ou igual a $var2
$var1 > $var2 $var1 maior que $var2
$var < $var2 $var1 menor que $var2
$var != $var2
$var1 <> $var2
$var1 diferente a $var2

PHP: Operadores Lógicos

Operador Descrição
!$var1 Operador de negação
$var1 && $var2, $var1 AND $var2 Operador AND
$var1 || $var2, $var1 OR $var2 Operador OR
$var1 XOR $var2 Operador XOR

Hello, $name

          <!DOCTYPE html>
<?php
  $name = $_GET['name'];
?>
<html>
<body>
      <h1>Olá, <?php echo $name?></h1>
</body>
</html>
          
        

PHP: Estruturas de Controle

Desenvolvimento de Aplicativos Web - COLTEC/MG

PHP: Estruturas de Controle

João Eduardo Montandon

Desenvolvimento de Aplicativos Web - COLTEC/MG

Introdução

Estruturas de Controle: Estruturas que permitem "controlar" o comportamento de execução de determinados trechos do código.

Principais Estruturas:

Estruturas Condicionais

Estruturas Condicionais

Assim como as demais linguagens, PHP possui as seguintes estruturas condicionais:

PHP: Comando if

            
if (expressao) {
} else {
}
            
          
            
$login = $_GET["login"];
if ($login == "admin") {
  echo "UNLIMITED POWEEERRRR";
} else {
  echo "Hello, citzen";
}
            
          

PHP: Comando elseif

            
if (expressao) {
} elseif(expressao) {
} else {
}
            
          
            
$login = $_GET["login"];
if ($login == "admin") {
  echo "UNLIMITED POWEEERRRR";
} elseif($login == "boss") {
  echo "Hello, boss";
} else {
  echo "Access denied";
}
            
          

PHP: O comando switch

Assim como JavaScript, é possível fazer switch de qualquer valor primitivo (números, strings, caracteres, etc.).

            switch (n) {
    case label1:
        break;
    case label2:
        break;
    // ...
    default:
}
            
          
            $favcolor = $_GET["color"];
switch ($favcolor) {
    case "red":
        echo "VERMELHO!";
        break;
    case "blue":
        echo "AZUL!";
        break;
    default:
        echo "...";
}
            
          

Estruturas de Repetição

Estruturas de Repetição

Suporte as principais estruturas de repetição:

PHP: O comando while

          
$password = $_GET['passwd'];
while($password != $adminPassword) {
  echo "Senha inválida, tente novamente";
}
          
        

PHP: O comando do-while

          
$numero = 1;
do {
  echo "o valor atual de número é $numero <br>";
  $numero++;
} while($numero < 100);
          
        

PHP: O comando for

          
for($cont = 0; $cont < 10; $cont++) {
  echo "A variável \$cont vale $cont";
  echo "<br>"
}
          
        

PHP: O comando foreach

O PHP fornece um comando de repetição que iterage sobre todos os elementos de uma coleção (vetor).

            
foreach($nome_vetor as $elemento) {
  <comandos>
}
            
          
            
foreach($nome_vetor as $chave => $valor) {
  <comandos>
}
            
          

PHP: O comando foreach

            
$elementos = array (1, 2, 3, 4, 5);
foreach($elementos as $elemento) {
  echo "O valor atual é $elemento";
  echo "<br>";
}
            
          
            
$endereco = array ("rua" => "Malva",
  "numero" => 192, "apto" => 210);
foreach($endereco as $chave => $valor) {
  echo "\$endereco[$chave] = $valor";
  echo "<br>";
}
            
          

PHP: Funções

Desenvolvimento de Aplicativos Web - COLTEC/MG

PHP: Funções

João Eduardo Montandon

Desenvolvimento de Aplicativos Web - COLTEC/MG

Introdução

Funções são trechos de código que processam tarefas rotineiras.

Exemplos: Validar CPF, transformar string em caixa alta, etc.

Sintaxe Básica

          
function nome_funcao(arg1, arg2, arg3, ... argN) {
  comandos
  [ return < expressao > ]
}
          
        

Sintaxe Básica

          <?php
  function soma_valores($v1, $v2, $v3) {
    $soma = $v1 + $v2 + $v3;
    echo "$v1 + $v2 + $v3 = $soma";
  }
  soma_valores(10, 20, 30);
?>
          
        

O Comando return

Toda vez que quisermos retornar um valor da função, utilizamos o comando return.

Da mesma forma que acontece em JavaScript, não precisamos especificar o tipo de retorno da função. Basta utilizar o return para retornar o valor.

O Comando return

          function valida_nome($palavra) {
  if(ctype_alpha($palavra))
    return strtoupper($palavra);
  else
    return NULL;
}
$nome = valida_nome("PedroHenrique");
echo "$nome";
          
        

Parâmetros: Valor & Referência

PHP suporta passagem por valor e referência. Por padrão, a passagem é feita por valor.

Se quiser passar por referência, devemos passar a referência da variável (&).

Parâmetros: Valor & Referência

          function dobro($valor) {
  $valor = $valor * 2;
}
function duplica(&$valor) {
  $valor = $valor * 2;
}
$valor = 5;
dobro($valor);
echo $valor . "<br>";
duplica($valor);
echo $valor;
          
        

Parâmetros: Valores-padrão

Recurso que injeta um valor default em um parâmetro, caso ele não seja fornecido.

Parâmetros: Valores-padrão

          
function nacionalidade($nome, $pais = "Brasil") {
  echo "$nome nasceu no(a) $pais";
}
nacionalidade("Henry", "França");
nacionalidade("Ronaldo");
          
        

PHP: Includes

Desenvolvimento de Aplicativos Web - COLTEC/MG

PHP: Utilizando Includes em PHP

João Eduardo Montandon

Desenvolvimento de Aplicativos Web - COLTEC/MG

Introdução

Em um sistema web, é muito comum que trechos de código HTML se repitam entre as páginas (menu, cabeçalho, rodapé, etc.).

Problema: Manutenção é custosa (Se o nome de uma opção do menu mudar, esse nome deve mudar em todas as páginas!!)

Introdução

PHP fornece uma forma de modularizar trechos de código que são comuns entre as páginas.

Desta forma, toda vez que você precisar daquele "pedaço" da página, basta importá-lo.

O Comando include

Comando responsável por importar um arquivo dentro de outro.

          
          <?php include "nome_do_arquivo"; ?>
          
        

O Comando include

          <html>
  <body>
      <? php include "menu.inc"; ?>
      <div class="main">
          lorem ...
      </div>
      <? php include "rodape.inc"; ?>
  </body>
</html>
        

Reutilizando Código

Conforme já descrito anteriormente, o comando include importa o código de um arquivo em outro. Isto também é válido para código PHP!!

Por meio do include, podemos importar trechos de código PHP, tais como funções, objetos, variáveis, etc.

Reutilizando Código

              $meses = array(...);
$dia = date ("d", time());
$mes = date ("m", time());
$ano = date ("Y", time());
echo "$dia de " . $meses[$mes-1] .
 " de $ano";
              
            
Exemplo
              <html>
  <body>
    <h1>Bem vindo</h1>
    <h3>
      Agora são
      <?php include "date.inc"; ?>.
    </h3>
  </body>
</html>
              
            

O Comando require

Além do comando include, o PHP contém outro comando para incluir arquivos: require

Principal Diferença: O include continua a carregar a página sem o arquivo, enquanto o comando require apresenta apresenta um erro de compilação se o arquivo não foi encontrado.

O Comando require

            <html>
<body>
 <? php require "funcoes.inc"; ?> 
  <div class="main">
    <? php
      if(!cpf_valido(_$GET["cpf"])) {
        echo "CPF Inválido!!";
      }
    ?>
  </div>
</body>
</html>
          

PHP: Formulários

Desenvolvimento de Aplicativos Web - COLTEC/MG

PHP: Formulários

João Eduardo Montandon

Desenvolvimento de Aplicativos Web - COLTEC/MG

Introdução

Os formulários representam um componente fundamental para comunicação entre usuário e aplicação web.

São por meio dos formulários que o usuário tem a oportunidade de enviar dados para o servidor.

Formulário: Exemplo

              
<form>
Nome: <input type="text" name="nome"> <br>
Idade: <input type="text" name="idade"> <br>
<input type="submit" name="Enviar">
</form>
              
            

Formulários

Ao se trabalhar com formulários, dois parâmetros precisam ser fornecidos:

  1. A página para onde o formulário irá redirecionar
  2. Qual tipo de requisição esse formulário irá disparar

Formulário: Exemplo Completo

          
<form action="pagina.html" method="post">
  Login: <input type="text" name="login"> <br>
  Senha: <input type="password" name="senha"> <br>
  <input type="submit" name="Log in">
</form>
        

Para conhecer os campos existentes no formulário, acesse esse link.

Submetendo o Formulário

A ação de submeter envia os dados do formulário para o servidor, isto é, todos os dados fornecidos pelo usuário nos campos do formulário.

Submetendo o Formulário

A submissão é realizada por um componente HTML em específico: o input definido como submit

          <!-- Componente que faz a submissão -->
<input type="submit" name="Submit">
          
        

Tratando os Dados da Submissão

Em PHP, os dados enviados pela submissão podem ser recuperados por meio de dois vetores globais:

Tratando os Dados da Submissão

          
$nome = $_GET["login"];
$senha = $_GET["senha"];
$nome = $_POST["login"];
$senha = $_POST["senha"];
          
        

Segurança: Code Injection

Nome:
          
<?php $nome = $_POST["nome"]; ?>
<html>
  <body>
    <h1>Olá, <?php echo "$nome"; ?></h1>
  </body>
</html>
          
        

Segurança: Code Injection

Quando um usuário insere um trecho de código que quebra o funcionamento do programa, no intuito de burlar o sistema e obter informações.

Como resolver??

Anulando os caracteres especiais do trecho inserido

Segurança: Code Injection

          
<?php
  $nome = htmlspecialchars($_POST["nome"]);
?>
<html>
  <body>
    <h1>Olá, <?php echo "$nome"; ?></h1>
  </body>
</html>
          
        

Verificando Campos dos Formulários

O PHP disponibiliza algumas funções para ajudar na verificação dos dados inseridos pelo usuário

Função Funcionalidade
empty($str) Verifica se string está vazia
strlen($str) Retorna tamanho da string
strstr($str, $str2) Procura pela primeira ocorrência de $str2

PHP: Sessions e Cookies

Desenvolvimento de Aplicativos Web - COLTEC/MG

PHP: Sessions & Cookies

João Eduardo Montandon

Desenvolvimento de Aplicativos Web - COLTEC/MG

P: Como o servidor sabe que você é você??

R: Ele não sabe :(

O servidor, por si só, é incapaz de relacionar um identifcador a uma requisição.

HTTP e o estado stateless

Na verdade, isso é uma limitação do modelo do protocolo HTTP.

Em HTTP, as requisições são independentes umas das outras.

Como a conexão não é persistida, o container não reconhece que o cliente que fez a 2a requisição é o mesmo que fez a 1a.

A Solução

Solução: Manter um espaço no cliente ou servidor que armazene os dados a serem enviados entre as requisições

Cookies

Cookies

Nada mais é do que um arquivo texto que é armazenado na máquina do usuário para ser recuperado posteriormente no servidor.

Contém valores formados por pares nome/valor (tuplas).

Definindo Cookies

          
bool setcookie (string $name, string $value)
          
        

Definindo Cookies

          $login = $_POST["login"];
$password = $_POST["password"];
setcookie("login", $login); // adiciona cookie login
setcookie("password", $password); // adiciona cookie password
...
setcookie("login"); // remove cookie login
setcookie("password"); // remove cookie password
          
        

Acessando Cookies

Os cookies podem ser acessados por meio do array $_COOKIE.

É importante ressaltar que os valores a serem recuperados pelo cookie só estarão disponíveis na requisição seguinte a sua definição.

Acessando Cookies

          
echo "O login digitado foi" . $_COOKIE['login'];
echo "<br>";
echo "A senha digitada foi" . $_COOKIE['password'];
          
        

Sessões

Sessões

Permitem armazenar no servidor as informações de determinados usuários.

Consequentemente, o próprio servidor define o tempo de "validade" dessas informações.

Sessões

Cada sessão tem um identificador único -- denominado session id -- utilizado para identificar qual sessão pertence a qual usuário.

Este identificador é criado no momento em que o usuário acessa a página, e então é transmitido de duas formas:

  1. Cookies
  2. Query strings (caso os cookies estejam desabilitados)

Iniciando uma Sessão

A Sessão pode ser iniciada por meio do comando session_start

          
<? php
  session_start();
?>
          
        

Registrando Variáveis em uma Sessão

Diferentemente de cookies, é possível armazenar qualquer tipo de valor em uma sessão (inteiros, strings, booleanos, arrays, objetos, etc).

Para registrar uma variável, lidamos diretamente com o array $_SESSION.

Registrando Variáveis em uma Sessão

          <? php
  session_start();
  if(!isset($_SESSION["contador"])) {
    $_SESSION["contador"] = 1;
  } else {
    $_SESSION["contador"]++;
  }
?>
          
        

Lendo Variáveis de uma Sessão

          <? php
  session_start();
  // ...
  // ... processamento ...
  // ...
  echo $_SESSION["contador"] . " acessos registrados";
?>
          
        

Destruindo sessões

Quando não é mais necessário aquela sessão, devemos sempre destruí-la, para evitar que os dados possam ser acessados posteriormente.

          <? php
      // fazendo logoff do usuário
      session_destroy();
?>
          
        

Sessões via Query Strings

Mas e se os cookies estiverem desabilitados? #comofas??

O PHP possui uma constante (denominada SID) que armazena o session id do usuário.

Desta forma, basta enviar o valor dessa constante na URL da página.

Sessões via Query Strings

          <? php
  session_start();
  //... processamento ...
  echo "<a href='minhaPagina.php?". SID . "'>Clique aqui<a/>";
?>
          
        

PHP: Arquivos

Desenvolvimento de Aplicativos Web - COLTEC/MG

PHP: Manipulação de Arquivos

João Eduardo Montandon

Desenvolvimento de Aplicativos Web - COLTEC/MG

Prog. = Processo + Dados

Introdução

Todo programa é composto por processamento e dados.

Ter uma rotina de armazenamento e recuperação consistente desses dados é fundamental para o "sucesso" de um sistema.

Arquivos

A manipulação de arquivos representa a forma mais simples de persistência de dados em uma aplicação.

Geralmente, os arquivos são separados por "assunto", e então o conteúdo deste arquivo reflete as informações armazenadas sobre o determinado assunto.

Arquivos

O PHP contém uma série de funções que auxiliam o processo de escrita e leitura de arquivos.

  • fopen
  • fclose
  • fread
  • fgets
  • fwrite
  • copy
  • delete
  • fclose
  • feof
  • file_exists
  • file_get_contents
  • file_put_contents
  • file
  • fnmatch
  • is_dir

Para lista completa das funções, acesse este link.

Lidando com Arquivos

  1. Abrir o arquivo
  2. Manipular o arquivo (Leitura ou escrita)
  3. Fechar o arquivo

Abertura de Arquivo

Para abrir um arquivo, utilizamos a função fopen:

              
fopen(nome_arquivo, modo);
              
            
  • nome_arquivo: Nome do arquivo a ser aberto.
  • modo: Modo de abertura do arquivo.

Abertura de Arquivo

          
$arquivo = fopen("/home/test/index.txt", "r");
$arquivo = fopen("public/users.txt", "r+t");
$arquivo = fopen("c:\\Meus Documentos\\Public\\config.bin", "w+b");
$arquivo = fopen("http://www.meusite.com/", "rt");
          
        

Fechamento de Arquivo

Para fechar um arquivo, utiliza-se a função fclose:

          
fclose(ponteiro_do_arquivo);
          
        

Fechamento de Arquivo

          <? php
  $arquivo = fopen("arquivo.txt", "r+");
  /*
    ... processamento do arquivo...
  */
  fclose($arquivo);
?>
        

Leitura: O comando fread

Faz a leitura de dados com base em uma quantidade de bytes enviada por parâmetro.

          <? php
  $arquivo = fopen("teste.txt", "r");
  $conteudo = fread($arquivo, 30);
  echo "$conteudo";
  fclose($arquivo);
?>
          
        

Leitura: O comando fgets

Faz a leitura de uma linha do arquivo.

          <? php
  $arquivo = fopen("teste.txt", "r");
  while(!feof($arquivo)) {
    $linha = fgets($arquivo);
    echo "$linha <br>";
  }
  fclose($arquivo);
?>
          
        

Escrita: O comando fwrite

Faz a escrita de dados no arquivo.

          <? php
  $arquivo = fopen("history.txt", "a");
  $user = $_GET["user"];
  $date = time();
  fwrite($arquivo, "$user -- $date");
  fclose($arquivo);
?>
          
        

PHP: POO

Desenvolvimento de Aplicativos Web - COLTEC/MG

PHP: Programação Orientada a Objetos

João Eduardo Montandon

Desenvolvimento de Aplicativos Web - COLTEC/MG

Introdução

Objetos: Forma de representar estruturas mais complexas no programa.

Como represento uma pessoa, carro, ou escola em meu programa?

Todo objeto possui duas características: atributos e ações

Introdução

Os objetos são descritos por meio de uma classe. Toda classe descreve um conjunto de atributos e métodos.

Os atributos são representados por variáveis

As ações são representadas por métodos.

PHP: Definindo uma classe

          
class nome_classe {
  < atributos & métodos >
}
          
        
          class Pessoa {
  var $nome;
  var $idade;
  function Pessoa($nome, $idade) {
    $this->nome = $nome;
    $this->idade = $idade;
  }
  function falar($frase) {
  	echo $frase;
  }
}
$p = new Pessoa("Silvio Santos", 20);
$p->falar("MAH OEEEHHHH!!");
          
        

PHP: Atributos

Os atributos devem ser criados por meio da palavra-chave var,e são acessados dentro dos métodos por meio do termo $this

          class classe {
  var $nome_variavel;
  function f() {
    $this->nome_variavel = 75;
  }
}
          
        

PHP: Métodos

Os métodos são criados da mesma forma que anterior, porém dentro das classes.

          class classe {
  // atributos ...
  function executar() {
    // código
  }
}
          
        

Métodos: Construtores

Construtores: métodos especiais que são executados toda vez que uma nova classe é instanciada. Representado pelo método __construct().

          class classe {
  function __construct() {
    echo "Chamando o construtor. Instanciação da classe!!";
  }
}
          
        

Métodos: Destrutores

Método que é invocado toda vez que a instância de uma classe é destruída. Declara-se um destrutor por meio do método __destruct().

          class classe {
  function __destruct() {
    echo "Chamando destrutor. Destruindo objeto!!";
  }
}
          
        
          class BancoDeDados {
  var $enderecoDB;
  function __construct($enderecoDB) {
    $this->enderecoDB = $enderecoDB;
  }
  function connect() {
    echo "Se conectando ao Banco de dados no endereco $this->enderecoDB\n";
  }
  function __destruct() {
    echo "Desconectando do Banco de dados";
  }
}
$db = new BancoDeDados("150.164.0.132:5481");
$db->connect();
$db = null;
          
        

Programação Orientada a Objetos: Pt2.

Visibilidade, herança, interfaces, etc.

Visibilidade

Como em outras linguagens, o PHP também permite atribuir níveis de visibilidade a determinados elementos da classe.

Os níveis de visibilidade podem ser atribuídos a atributos, métodos, e definições de classes.

Visibilidade

Mais especificamente, o PHP oferece três opções de visibilidade:

Visibilidade: Exemplo

          
class Pessoa {
  private var $nome;
  private var $idade;
  protected function imprimeRelatorio() {
    //...
  }
  public function imprimePessoa() {
    //...
  }
}
          
        

Herança

O mecanismo de herança é uma das peças fundamentais para a POO.

A herança permite o uso de polimorfismo nas linguagens de programação.

Herança

Similar ao Java, o PHP pode estender três "tipos" de classes:

  1. Classes normais
  2. Classes abstratas, neste caso implementando os métodos abstratos
  3. Interfaces, implementando os métodos descritos na interface

Herança: classes normais

              
class Classe1 {
  public function bomDia() {
    echo "Bom dia!! <br>";
  }
}
              
            
              
class Classe2 extends Classe1 {
  public function bomDia() {
    Classe1::bomDia();
    echo "Olá!!<br>";
  }
}
              
            

Herança: classes abstratas

Ao se anotar uma classe como abstrata, a linguagem permite que o programador apenas declare certos métodos, deixando para as subclasses implementarem sua funcionalidade.

Classes abstratas não podem ser instanciadas diretamente.

Herança: classes abstratas

              
abstact class ClasseAbstrata {
  abstract public function teste();
}
              
            
              
class Classe extends ClasseAbstrata {
  public function teste() {
    echo "Método teste() chamado!! <br>";
  }
}
              
            

Herança: Interfaces

Interface: contrato que define tudo o que uma classe deve fazer se quiser herdar as características daquele grupo.

Program to an 'interface', not an 'implementation'.

Herança: Interfaces

              interface MinhaInterface {
  function teste();
}
class Classe implements MinhaInterface {
  function teste() {
    //...
  }
}
              
            

A palavra-chave final

final Palavra chave que bloqueia a modificação/extensão de métodos e classes

final - Exemplo

              
class Classe {
  public final metodo() {/* ... */}
}
class Classe2 extends Classe {
  public metodo() {/* ERRO!! */}
}
              
            
              
final class Classe {
  public metodo() { /* ... */ }
}
/* ERRO!! */
class Classe2 extends Classe { }
              
            

Referências

NIEDERAUER, J.; Desenvolvendo Websites com PHP; 2a Edição, 2011; Novatec

w3schools: PHP Tutorial

PHP.net

Fork me on Github