class
Uma classe é uma coleção de variáveis e funções que trabalham com estas
variáveis. As variáveis são definidas com a palavra chave var
e funções com a palavra chave function. Uma classe
é declarada utilizando a seguinte sintaxe:
Isto define a classe chamada Cart que consiste em um array associativo
de artigos no carrinho e duas funções para adicionar e remover itens
deste carrinho.
Aviso
Você não pode quebrar uma definição de classe
em múltiplos arquivos. Você também não pode quebrar uma definição de
classe em múltiplos blocos de PHP, exceto que esta quebra se dê dentro da
declaração de um método. O código a seguir não irá funcionar:
Todavia, o código abaixo é permitido:
As seguintes notas de advertência são válidas para PHP 4.
Cuidado
O nome stdClass é utilizado internamente pelo motor Zend
e é reservado. Você não pode criar uma classe chamada
stdClass em PHP.
Cuidado
Os nomes de função __sleep e
__wakeup são métodos mágicos no PHP. Você
não deve ter métodos com estes nomes em nenhuma de suas classes,
a não ser que você queira se aproveitar da funcionalidade
mágica associadada a eles. Veja abaixo mais informações.
Cuidado
O PHP reserva todos os nomes de funções iniciados com __ como mágicos.
É recomendado que você não crie funções com prefixo
__ em PHP, a não ser que você queira utilizer as funcionalidades mágicas documentadas.
No PHP 4, apenas são permitidos inicializadores constantes de variáveis
através da palavra-chave var. Para inicializar variáveis com
algum valor não constante, você precisa de uma função de inicialização que é
automaticamente executado na inicialização de um novo objeto
da classe. Esse tipo de função é chamada de construtor (veja o exemplo abaixo):
Classe são tipos, isto é, elas são modelos para objetos (variáveis). Para criar
um objeto você deve atribuir a uma variável uma nova instância classe desejada
utilizando o operador new.
O código acima cria os objetos $cart e
$another_cart, ambos da classe Cart. A função
add_item() do objeto$cart está sendo chamada para adicionar 1
item do artigo de número 10 ao carrinho $cart. 3 itens do
artigo de número 0815 são adicionados ao carrinho $another_cart.
Ambos, $cart e $another_cart, possuem
as funções add_item(), remove_item()
e a variável (propriedade) items. Estas são funções e variáveis distintas em cada objeto. Você pode
pensar nos objetos como algo semelhante a diretórios em um sistema de arquivos.
Em um sistema de arquivos você pode possuir dois arquivos diferentes
chamados README.TXT, desde que estejam em diretórios diferentes.
Assim como os diretórios onde você têm de utilizar o nome completo do caminho
para encontrar cada arquivo na hierarquia do sistema, você deve especificar
o nome completo da função que você deseja chamar: em termos do PHP, o diretório
raiz será o namespace global e o separador de pastas
será ->. Deste modo,
os nomes $cart->items e
$another_cart->items nomeiam diferentes variáveis.
Note que a variável é chamada $cart->items, não
$cart->$items, isto é a variável em PHP só possui
um único dólar ($).
Em uma definição de classe, você não sabe com qual nome seu objeto será
instanciado em seu programa: quando a classe Cart foi
escrita, não se sabia se o objeto iria se chamar
$cart, $another_cart, ou qualquer
outro nome. Desse modo você não
pode escrever $cart->items no próprio
código da classe Cart. Ao invés disso, para acessar as próprias funções e variáveis
de uma classe de dentro da própria classe, você pode utilizar a pseudo-variável
$this a qual pode ser lida como 'meu(minha) próprio(a)' ou 'objeto
corrente'. Assim, '$this->items[$artnr] +=
$num' pode ser lido como 'adicione $num
ao contador $artnr de itens do meu próprioarray' ou 'adicione
$num ao contador $artnr do array items
do objeto corrente'.
Nota:
A pseudo-variável $this geralmente não é definida em um método
que seja chamado estaticamente. Isto não é,
no entanto, uma regra estrita: $this é definida caso um método
é chamado estáticamente por meio de outro objeto. Nesta situação o valor de
$this será o objeto que está efetuando a chamada. Isso é
ilustrado no exemplo a seguir:
Nota:
Existem algumas funções interessantes para manipular classes e objetos. Você pode
querer dar uma olhada em Funções para
Classes/Objetos.