class


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:

<?php
class Cart {
var
$items; // Itens no seu carrinho

// Adiciona $num artigos com $artnr ao carrinho

function add_item($artnr, $num) {
$this->items[$artnr] += $num;
}

// Remove $num artigos de $artnr do seu carrinho

function remove_item($artnr, $num) {
if (
$this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return
true;
} elseif (
$this->items[$artnr] == $num) {
unset(
$this->items[$artnr]);
return
true;
} else {
return
false;
}
}
}
?>

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:

<?php
class test {
?>
<?php
function test() {
print
'OK';
}
}
?>

Todavia, o código abaixo é permitido:

<?php
class test {
function
test() {
?>
<?php
print 'OK';
}
}
?>

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):

<?php
class Cart {
/* Estas inicializações NÃO funcionam no PHP 4. */
var $todays_date = date("Y-m-d");
var
$name = $firstname;
var
$owner = 'Fred ' . 'Jones';
/* Arrays contendo valores constantes funcionarão. */
var $items = array("VCR", "TV");
}

/* Esta é a maneira como deve ser feito no PHP4. */
class Cart {
var
$todays_date;
var
$name;
var
$owner;
var
$items = array("VCR", "TV");

function
Cart() {
$this->todays_date = date("Y-m-d");
$this->name = $GLOBALS['firstname'];
/* etc. . . */
}
}
?>

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.

<?php
$cart
= new Cart;
$cart->add_item("10", 1);

$another_cart = new Cart;
$another_cart->add_item("0815", 3);
?>

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).

<?php
// correto, um único br /$cart->items = array("10" => 1);

// inválido, porque $cart->$items se torna $cart->""
$cart->$items = array("10" => 1);

// correto, mas pode ou não ser a real intençaõ:
// $cart->$myvar se torna $cart->items
$myvar = 'items';
$cart->$myvar = array("10" => 1);
?>

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:

<?php
class A
{
function
foo()
{
if (isset(
$this)) {
echo
'$this foi definido (';
echo
get_class($this);
echo
")\n";
} else {
echo
"\$this não foi definido.\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 foi definido (a)
$this não foi definido.
$this foi definido (b)
$this não foi definido.

Nota:

Existem algumas funções interessantes para manipular classes e objetos. Você pode querer dar uma olhada em Funções para Classes/Objetos.


 

Codex - 2012/2017 - Artigos Educacionais