O Básico

Classe

Toda definição de classe começa com a palavra-chave class, seguido por um nome da classe, que pode ser qualquer nome que não seja uma palavra reservada no PHP. seguido por um par de chaves, que contém a definição dos membros e métodos da classe. Uma pseudo variável, $this, está disponível quando um método é chamado dentro de um contexto de objeto. $this é uma referência para o objeto chamador do método (normalmente o objeto ao qual o método pertence, mas pode ser outro objeto, se o método é chamado statically do contexto de um objeto secundário). Isso é ilustrado no exemplo a seguir:

Exemplo 19-1. Variável $this em linguagens com orientação à objetos

<?php
class A
{
    function
foo()
    {
        if (isset(
$this)) {
            echo
'$this está definida (';
            echo
get_class($this);
            echo
")\n";
        } else {
            echo
"\$this não está definida.\n";
        }
    }
}

class
B
{
    function
bar()
    {
        
A::foo();
    }
}

$a = new A();
$a->foo();
A::foo();
$b = new B();
$b->bar();
B::bar();
?>

O exemplo acima irá imprimir:

$this está definida (a)
$this não está definida.
$this está definida (b)
$this não está definida.

Exemplo 19-2. Definição de SimpleClass

<?php
class SimpleClass
{
    
// declaração de membro
    
public $var = 'um valor padrão';

    
// declaração de método
    
public function displayVar() {
        echo
$this->var;
    }
}
?>

new

Para criar uma instância de um objeto, um novo objeto deve ser criado e atribuído à uma variável. Um objeto sempre será atribuído quando for criado um novo objeto, a não ser que o objeto tenha um construtor definido que dispare uma exceção por um erro.

Exemplo 19-3. Criando uma instância

<?php
$instance
= new SimpleClass();
?>

Quando atribuír um instância já criada de um objeto à uma variável nova, essa acessarpa a mesma instância do objeto que foi atribuído. Esse comportamento se mantem quando passando instâncias à uma função. Uma nova instância de um objeto já criado pode ser feita clonando o mesmo.

Exemplo 19-4. Atribuíção de Objetos

<?php
$assigned   
=  $instance;
$reference  =& $instance;

$instance->var = '$assigned terá esse valor';

$instance = null; // $instance e $reference tornam-se nulos

var_dump($instance);
var_dump($reference);
var_dump($assigned);
?>

O exemplo acima irá imprimir:

NULL
NULL
object(SimpleClass)#1 (1) {
   ["var"]=>
     string(30) "$assigned terá esse valor"
}

extends

Uma classe pode herdar métodos e membros de outra classe usando a palavra-chave extends na sua declaração. Não é possível herdar classes múltiplas, uma classe só pode herdar uma classe base.

Os métodos e membros herdados podem ser sobrescritos, a não ser que a classe pai definiu um método como final, redeclarando eles com o mesmo nome definido na classe pai. É possível acessar os métodos e membros sobrescritos referenciado eles com parent::

Exemplo 19-5. Herança Simples

<?php
class ExtendClass extends SimpleClass
{
    
// Redefine o método pai
    
function displayVar()
    {
        echo
"Classe Herdeira\n";
        
parent::displayVar();
    }
}

$extended = new ExtendClass();
$extended->displayVar();
?>

O exemplo acima irá imprimir:

Classe Herdeira
um valor padrão