1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
|
<?xml version="1.0" encoding="iso-8859-1"?>
<chapter id="language.oop">
<title>Classes e Objetos</title>
<sect1 id="keyword.class">
<title><literal>classe</literal></title>
<para>
Uma classe uma coleo de variveis e funes trabalhando com essas
variveis. Uma classe definida usando-se a seguinte sintaxe:
<informalexample>
<programlisting role="php">
<?php
class Cart {
var $items; // Items no nosso carrinho de compras
// Acrescenta $num artigos de $artnr ao carrinho
function add_item ($artnr, $num) {
$this->items[$artnr] += $num;
}
// Tira $num artigos de $artnr do carrinho
function remove_item ($artnr, $num) {
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return true;
} else {
return false;
}
}
}
?>
</programlisting>
</informalexample>
</para>
<para>
Isto define uma classe chamada Cart que consiste de uma matriz associativa de
artigos no carrinho e duas funes para acrescentar e remover items deste
carrinho.
</para>
<para>
Classes so tipos, ou seja, eles so modelos de variveis atuais. Voc tem que
criar uma varivel do tipo desejado com o novo operador.
</para>
<informalexample>
<programlisting role="php">
$cart = new Cart;
$cart->add_item("10", 1);
</programlisting>
</informalexample>
<para>
Isto cria um objeto $cart da classe Cart. A funo
add_item() daquele objeto est sendo chamada para acrescentar 1 item do artigo
nmero 10 ao carrinho. </para><para> Classes podem ser extenses de outras classes.
A classe estendida ou derivada tem todas as variveis e funes da classe base e o
que voc acrescentar na definio estendida. Isto feito usando-se a palavra-chave
'extends'. Herana mltipla no suportada.
</para>
<informalexample>
<programlisting role="php">
class Named_Cart extends Cart {
var $owner;
function set_owner ($name) {
$this->owner = $name;
}
}
</programlisting>
</informalexample>
<para>
Isto define uma classe Named_Cart que tem todas as variveis e funes de Cart mais
uma varivel adicional $owner e uma funo adicional set_owner(). Voc pode criar um
carrinho com nome na forma normal, e agora pode setar e obter o proprietrio do carrinho.
Voc pode ainda usar as funes normais do carrinho em carrinhos com nomes:
</para>
<informalexample>
<programlisting role="php">
$ncart = new Named_Cart; // Cria um carrinho com nome
$ncart->set_owner ("kris"); // Nomeia aquele carrinho
print $ncart->owner; // imprime o nome dos proprietrios do carrinho
$ncart->add_item ("10", 1); // (funcionalidade herdada de 'cart')
</programlisting>
</informalexample>
<para>
Dentro das funes de uma classe, a varivel $this significa este objeto. Voc tem que
usar $this->algo para acessar qualquer varivel ou funo chamada 'algo' dentro do seu
objeto corrente.
</para>
<para>
Construtores so funes em uma classe que so chamadas automaticamente quando voc cria
uma nova instncia de uma classe. Uma funo se torna um construtor quando ela tem o
mesmo nome que a classe.
</para>
<informalexample>
<programlisting role="php">
class Auto_Cart extends Cart {
function Auto_Cart () {
$this->add_item ("10", 1);
}
}
</programlisting>
</informalexample>
<para>
Isto define uma classe Auto_Cart que um Cart mais um construtor que inicializa o
'cart' com um item do artigo nmero "10" cada vez que um novo Auto_Cart est sendo
feito com "new". Construtores tambm podem levar argumentos e esses argumentos podem
ser opcionais, o que os torna muito mais teis.
</para>
<informalexample>
<programlisting role="php">
class Constructor_Cart extends Cart {
function Constructor_Cart ($item = "10", $num = 1) {
$this->add_item ($item, $num);
}
}
// Compra aquele mesmo material velho e chato.
$default_cart = new Constructor_Cart;
// Compra para valer...
$different_cart = new Constructor_Cart ("20", 17);
</programlisting>
</informalexample>
<caution>
<simpara>
Para classes derivadas, o construtor da classe pai no chamado automaticamente
quando o construtor da classe derivada chamado.
</simpara>
</caution>
</sect1>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->
|