|
2 | 2 |
|
3 | 3 | ## O que é ? |
4 | 4 |
|
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: |
6 | 6 |
|
7 | 7 | ```php |
8 | | -<?php |
| 8 | +// Player.php |
| 9 | +class Player { |
9 | 10 |
|
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 |
13 | 14 |
|
14 | | - public function quicar() //método |
| 15 | + /** |
| 16 | + * Método mágico: construtor |
| 17 | + */ |
| 18 | + public function __construct(string $username, string $password, float $money) |
15 | 19 | { |
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; |
17 | 59 | } |
18 | 60 | } |
19 | 61 | ``` |
20 | 62 |
|
| 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 | + |
21 | 104 | ## Como Usar ? |
22 | 105 |
|
23 | 106 | As classes devem ser instânciadas para serem usadas, uma instância deve ser criado através da sintaxe: |
24 | 107 |
|
25 | 108 | ```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); |
27 | 114 | ``` |
28 | 115 |
|
29 | | -> ### Nota: |
30 | 116 |
|
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. |
32 | 118 |
|
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). |
34 | 120 | Sintaxe: |
35 | 121 |
|
36 | 122 | ```php |
37 | 123 | //Atributo: |
38 | | -echo $bola->cor; |
39 | | -echo $bola->tamanho; |
| 124 | +echo "Nome de usuário: " . $danielhe4rt->username; |
40 | 125 |
|
41 | 126 | //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 | +} |
43 | 140 | ``` |
44 | 141 |
|
45 | 142 | Ir para: [4.2 Construtores e Destrutores](2-Construtores-e-destrutores.md) |
0 commit comments