Skip to content

Commit 2063e85

Browse files
authored
Merge pull request #83 from DanielHe4rt/chore/poo-classes
chore: melhores exemplos para introdução a classes
2 parents c5106dd + 03d24f7 commit 2063e85

File tree

1 file changed

+111
-14
lines changed

1 file changed

+111
-14
lines changed

4-Intermediário/1-Classes.md

Lines changed: 111 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,44 +2,141 @@
22

33
## O que é ?
44

5-
As classes são responsáveis por criarem estruturas e comportamentos para conceitos das aplicações e do mundo real, elas são compostas basicamente por propriedades e métodos. As propriedades funcionam como característias de um objeto (representa uma analogia aos objetos do mundo real) e os métodos representam suas funcionalidades. Podemos ter como exemplo uma bola, onde definimos sua cor, seu tamanho como características e seu comportamento poderia ser quicar, veja este exemplo:
5+
As classes são responsáveis por criarem estruturas e comportamentos para conceitos das aplicações e do mundo real, elas são compostas basicamente por propriedades e métodos. As propriedades funcionam como característias de um objeto (representa uma analogia aos objetos do mundo real/virtual) e os métodos representam suas funcionalidades. Podemos ter um exemplo de um jogador de qualquer jogo virtual, onde ele se registra, tem uma quantidade X de dinheiro, e caso queira pode trocar de senha, veja este exemplo:
66

77
```php
8-
<?php
8+
// Player.php
9+
class Player {
910

10-
class Bola {
11-
public $cor; //propriedade
12-
public $tamanho; //propriedade
11+
public string $username; // propriedade/atributo
12+
private string $password; // propriedade/atributo
13+
protected float $money; // propriedade/atributo
1314

14-
public function quicar() //método
15+
/**
16+
* Método mágico: construtor
17+
*/
18+
public function __construct(string $username, string $password, float $money)
1519
{
16-
//iniciar ação de quicar
20+
$this->username = $username; // Setter do Construtor
21+
$this->password = password_hash($password, PASSWORD_ARGON2I); // Setter do Construtor
22+
$this->money = $money; // Setter do Construtor
23+
}
24+
25+
/**
26+
* Metodo: canBuy - Checa se o jogador tem dinheiro suficiente para comprar um item
27+
* @param itemPrice float
28+
* @return bool
29+
*/
30+
31+
public function canBuy(Item $item): bool
32+
{
33+
return $this->getMoney() >= $item->getPrice();
34+
}
35+
36+
/**
37+
* Metodo: updatePassword (Setter) - Altera a senha do jogador
38+
* @param oldPassword string
39+
* @param newPassword string
40+
* @return void
41+
*/
42+
43+
public function updatePassword(string $oldPassword, string $newPassword): void
44+
{
45+
if (!password_verify($oldPassword, $this->password)) {
46+
throw new Exception('A senha anterior está incorreta.');
47+
}
48+
49+
$this->password = password_hash($newPassword, PASSWORD_ARGON2I);
50+
}
51+
52+
/**
53+
* Método: getMoney (Getter) - retorna a quantidade de dinheiro do jogador
54+
* @return float
55+
*/
56+
public function getMoney(): float
57+
{
58+
return $this->money;
1759
}
1860
}
1961
```
2062

63+
```php
64+
// Item.php
65+
class Item {
66+
67+
private string $name; // propriedade/atributo
68+
private float $price; // propriedade/atributo
69+
70+
/**
71+
* Método mágico: construtor
72+
*/
73+
public function __construct(string $name, float $price)
74+
{
75+
$this->name = $name;
76+
$this->price = $price;
77+
}
78+
79+
/**
80+
* Método: getName (Getter) - retorna o nome do item
81+
* @return string
82+
*/
83+
84+
public function getName(): string
85+
{
86+
return $this->name;
87+
}
88+
89+
/**
90+
* Método: getPrice (Getter) - retorna o preço do item
91+
* @return float
92+
*/
93+
public function getPrice(): string
94+
{
95+
return $this->price;
96+
}
97+
}
98+
```
99+
100+
Uma boa prática e um jeito de não tomar tapa na cara dos seus colegas do projeto é manter
101+
**uma classe por arquivo**, por motivos de localização e indexação de arquivos. Se você ver o coleguinha
102+
colocando mais de uma classe por arquivo pode mete a mão na cara desse maluco >:@
103+
21104
## Como Usar ?
22105

23106
As classes devem ser instânciadas para serem usadas, uma instância deve ser criado através da sintaxe:
24107

25108
```php
26-
$bola = new Bola();
109+
$woodenSword = new Item('Wooden Sword', 800);
110+
111+
$silverSword = new Item('Silver Sword', 5640);
112+
113+
$danielhe4rt = new Player('danielhe4rt','secret123', 1000);
27114
```
28115

29-
> ### Nota:
30116

31-
> - Podemos observar neste caso que $bola é um objeto instância da classe Bola();
117+
> ### Nota: podemos notar que quando instanciamos a classe Item e a Player, houveram paramêtros sendo passados. Essa sequência de parametros é devido ao método CONSTRUTOR que colocamos na classe.
32118
33-
Seus métodos e atributos podem ser chamados e acessados através do operador '->'.
119+
Seus métodos e atributos podem ser chamados e acessados através do operador '->' (também conhecido pelos devs BR's como setinha :p).
34120
Sintaxe:
35121

36122
```php
37123
//Atributo:
38-
echo $bola->cor;
39-
echo $bola->tamanho;
124+
echo "Nome de usuário: " . $danielhe4rt->username;
40125

41126
//Métodos:
42-
$bola->quicar();
127+
echo "Saldo: " . $danielhe4rt->getMoney();
128+
129+
if ($danielhe4rt->canBuy($woodenSword)) {
130+
echo $danielhe4rt->username . ', você pode comprar a' . $woodenSword->name . '!';
131+
} else {
132+
echo $danielhe4rt->username . ', caraio tiozão ce tá liso hein? Vai ter como comprar a ' . $woodenSword->name . ' não!';
133+
}
134+
135+
if ($danielhe4rt->canBuy($silverSword)) {
136+
echo $danielhe4rt->username . ', você pode comprar a' . $silverSword->name . '!';
137+
} else {
138+
echo $danielhe4rt->username . ', caraio tiozão tem nem pra espada de madeira e quer a ' . $silverSword->name . ' num fode né!';
139+
}
43140
```
44141

45142
Ir para: [4.2 Construtores e Destrutores](2-Construtores-e-destrutores.md)

0 commit comments

Comments
 (0)