Introdução
Properties
Classes e Objetos
PHP Manual

## 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 estaticamente no contexto de um objeto secundário). Isso é ilustrado no exemplo a seguir:

Exemplo #1 Variável $this em linguagens com orientação a 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 #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;
}
}
?>`

O valor padrão deve ser uma expressão constante, não (por exemplo) uma variável, um membro da classe ou uma chamada de função.

Exemplo #3 Valor padrão de membros da classe

`<?php
class SimpleClass
{
// declarações de membro inválidas
public $var1 = 'olá '.'mundo';
public $var2 = <<<EOD
olá mundo
EOD;
public $var3 = 1+2;
public $var4 = self::myStaticMethod();
public $var5 = $myVar;
// declarações de membro válidas
public $var6 = myConstant;
public $var7 = self::classConstant;
public $var8 = array(true, false);
}
?>`

> Nota:

> Existem algumas funções legais para lidar com classes e objetos. É bom dar uma olhada nas funções de Classe/Objeto.

Diferente de heredocs, nowdocs pode ser usado no contexto de dado estático.

Exemplo #4 Exemplo com dado estático

`<?php
class foo {
// A partir do PHP 5.3.0
public $bar = <<<'EOT'
bar
EOT;
}
?>`

> Nota:

> Suporte a Nowdoc foi adicionado no PHP 5.3.0.

### new

Para criar uma instância de uma classe, um novo objeto deve ser criado e atribuído a 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. Classes devem ser definidas antes de serem instanciadas (e em alguns casos isso é um requerimento).

Exemplo #5 Criando uma instância

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

No contexto da classe, é possível criar um novo objeto por new self and new parent.

Quando atribuir uma instância já criada de um objeto a uma variável nova, a variável nova irá acessar a mesma instância do objeto que foi atribuído. Esse comportamento se mantém quando passando instâncias a uma função. Uma nova instância de um objeto já criado pode ser feita clonando o mesmo.

Exemplo #6 Atribuiçã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 sobrescritos ou membros estáticos referenciado-os com parent::

Exemplo #7 Herança da Classe 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

### ::class

Since PHP 5.5, the class keyword is also used for class name resolution. You can get a string containing the fully qualified name of the ClassName class by using ClassName::class. This is particularly useful with namespaced classes.

Exemplo #8 Class name resolution

`<?php
namespace NS {
class ClassName {
}
echo ClassName::class;
}
?>`

O exemplo acima irá imprimir:

    NS\ClassName

Introdução
Properties
Classes e Objetos
PHP Manual