-
Notifications
You must be signed in to change notification settings - Fork 1
/
orientacao_a_objetos.php
322 lines (276 loc) · 13.4 KB
/
orientacao_a_objetos.php
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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
<?php include "header.php";?>
<section class="require">
<div class="container">
<div class="row justify-content-md-center">
<div class="col col-md-8">
<h2>Requisitos</h2>
<p>
O que é necessário para que você possa seguir o tutorial.
</p>
</div><!-- .col -->
</div><!-- .row -->
<div class="row justify-content-md-center">
<div class="col col-md-8">
<ul class="list-group list-group-flush">
<li class="list-group-item">
<h3>PHP instalado</h3>
<p>
Caso você ainda não tenha pode seguir os passos deste <a href="instalacao.php">tutorial</a>
</p>
</li>
<li class="list-group-item">
<h3>Editor de código</h3>
<p>
Assim como utilizamos programas como o Word para escrever documentos,
também existem programas específicos que nos ajudam a digitar nossos códigos de programação
que chamamos de editores de código. Abaixo seguem alguns editores:
<ul class="list-unstyled">
<li><a href="https://code.visualstudio.com/" title="Visual Studio Code" target="_blank">Visual Studio Code</a></li>
<li><a href="https://www.sublimetext.com/" title="Sublime" target="_blank">Sublime</a></li>
<li><a href="https://atom.io/" title="Atom" target="_blank">Atom</a></li>
<li><a href="http://brackets.io/" title="Brackets" target="_blank">Brackets</a></li>
<li><a href="https://notepad-plus-plus.org/" title="Notepad++" target="_blank">Notepad++</a></li>
</ul>
</p>
</li>
<li class="list-group-item">
<h3>Básico do PHP</h3>
<p>
Caso você ainda não saiba pode seguir este <a href="programando_em_php.php">tutorial</a>
</p>
</li>
</ul>
</div><!-- .col -->
</div><!-- .row -->
</div><!-- .container -->
</section>
<article>
<div class="container">
<div class="row justify-content-md-center">
<div class="col col-md-8">
<h2>Orientação a Objetos</h2>
<p>
No PHP existem várias formas de programar e uma delas é a programação Orientada a Objetos (POO),
uma forma de programar (paradigma) que se aproxima mais do mundo real. <br>
Por exexmplo, se temos uma aplicação para cadastrar clientes, cada cliente é como um
objeto em nosso programa.
</p>
</div><!-- .col -->
</div><!-- .row -->
</div><!-- .container -->
</article>
<article>
<div class="container">
<div class="row justify-content-md-center">
<div class="col col-md-8">
<h2>Classes</h2>
<p>
Para começarmos a trabalhar com Orientação a Objetos em PHP precisamos primeiro criar uma classe. <br>
Pense na classe como se fosse uma forma de bolo: podemos usar uma forma para fazer bolos diferentes, como
de chocolate ou de laranja, só que todos terão o mesmo formato, o formato da forma. Em PHP usamos a classe
para criar vários objetos.
<br> Uma classe de Pacientes, por exemplo, pode criar vários objetos do tipo paciente,
em que todos terão um nome, porém cada um tem um nome diferente.
</p>
<p>
No PHP, geralmente, nós utilizamos um arquivo para cada classe e seu nome deve ser o nome da classe começando
com letra maiuscula. <br>
Para exemplificar vamos criar uma classe Cachorro que ficará no arquivo Cachorro.php:
</p>
<?php highlight_string(<<<'PHP'
<?php
class Cachorro
{
}
PHP
);?>
</div><!-- .col -->
</div><!-- .row -->
</div><!-- .container -->
</article>
<article>
<div class="container">
<div class="row justify-content-md-center">
<div class="col col-md-8">
<h2>Atributos</h2>
<p>
Agora que temos uma classe para criar um objeto do tipo Cachorro vamos definir seus atributos. <br>
Os atributos são as características que todos os objetos de uma classe devem ter. Por exemplo,
todo cachorro tem nome, idade, raça ou sexo, então esses seriam os atributos da minha classe Cachorro. <br>
Para criarmos um atributo para a classe nós declaramos uma váriavel geralmente com o nome do atributo:
</p>
<?php highlight_string(<<<'PHP'
<?php
class Cachorro
{
public $nome;
public $idade;
public $raca;
public $sexo;
public $tamanho;
}
PHP
);?>
</div><!-- .col -->
</div><!-- .row -->
</div><!-- .container -->
</article>
<article>
<div class="container">
<div class="row justify-content-md-center">
<div class="col col-md-8">
<h2>Métodos</h2>
<p>
Os métodos da nossa classe são os comportamentos que todos os objetos da classe possuem. Por exemplo,
geralmente os cachorros costumam latir e esse comportamento pode ser um método da nossa classe Cachorro.<br>
Para criamos um método escrevemos uma função dentro da classe com o nome do comportamento e o que ele deve
fazer quando o chamarmos:
</p>
<?php highlight_string(<<<'PHP'
<?php
class Cachorro
{
public $nome;
public $idade;
public $raca;
public $sexo;
public $tamanho;
public function latir(): string {
return "au au au";
}
}
PHP
);?>
</div><!-- .col -->
</div><!-- .row -->
</div><!-- .container -->
</article>
<article>
<div class="container">
<div class="row justify-content-md-center">
<div class="col col-md-8">
<h2>Objeto</h2>
<p>
Agora que temos a classe, vamos criar o objeto. Crie outro arquivo na mesma pasta em que
você criou o Cachorro.php e vamos chama-lo de index.php. Nele vamos chamar o arquivo que
tem a nossa classe e vamos criar um objeto:
</p>
<?php highlight_string(<<<'PHP'
<?php
require("Cachorro.php"); // Incluí o Cachorro.php
$meu_cachorro = new Cachorro;
$meu_cachorro->nome = "Duquesa";
echo $meu_cachorro->nome;
$meu_cachorro->idade = 5;
echo $meu_cachorro->idade;
$meu_cachorro->sexo = "fêmea";
echo $meu_cachorro->sexo;
echo $meu_cachorro->latir(); // Deve mostrar 'au au au'
PHP
);?>
<p>
No código acima utilizamos a função 'require' para incluirmos o arquivo com a nossa classe Cachorro no arquivo index.php
e assim podermos criar um objeto com ela.
</p>
<p>
No passo seguinte, criamos o objeto e o guardamos na variável $meu_cachorro. <br>
Para criar um objeto utilizamos a sintaxe <strong>new Nome_da_classe</strong>. No nosso caso, 'new Cachorro'.
</p>
<p>
Uma vez que temos o objeto criado podemos atribuir valores para os atributos desse objeto, então nós
escrevemos o nome da variável que esta quardando o objeto, seguida de uma seta
e depois o nome do atributo. Assim atribuímos um valor para essa variável.<br>
<strong>$nome_varivel->nome_atributo = valor</strong>. No nosso caso, '$meu_cachorro->nome = "Duquesa"'
</p>
<p>
Por último nós chamamos um método da classe Cachorro. Para isso utilizamos uma sintaxe
parecida com a de atributos porém, temos os <strong>( )</strong> no final, desta forma:
<strong>$nome_variavel->nome_metodo()</strong>.
</p>
</div><!-- .col -->
</div><!-- .row -->
</div><!-- .container -->
</article>
<article>
<div class="container">
<div class="row justify-content-md-center">
<div class="col col-md-8">
<h2>PPP (Público, Protegido e Privado)</h2>
<p>
Por motivos de segurança, nós temos o que chamamos de visibilidade dos atributos e métodos de uma classe.
Por exemplo, se declaramos um atributo de uma classe como <strong>private</strong>
esse atributo não poderá mais ser acessado diretamente pelo objeto.
</p>
<?php highlight_string(<<<'PHP'
<?php
class Cachorro
{
private $nome;
function latir(): string {
return "au au au";
}
}
$meu_cachorro->nome = "Duquesa"; // Gera erro
PHP
);?>
<p>
Isso é muito utilizado para proteger e garantir os dados dos objetos de uma classe. No caso acima, para acessarmos o atributo
nome do objeto da classe Cachorro, devemos criar um método para atribuir um valor a propriedade e para retornar o valor desta propriedade.
Costumamos chamar esses métodos respectivamente de getters e setters.
</p>
<?php highlight_string(<<<'PHP'
<?php
class Cachorro
{
private $nome;
function setNome(string $nome) {
$this->nome = $nome;
}
function getNome(): string {
return $this->nome;
}
function latir(): string {
return "au au au";
}
}
$meu_cachorro->setNome("Duquesa");
echo $meu_cachorro->getNome();
PHP
);?>
<p>
Para acessarmos o atributo nome que está como privado nós criamos um método chamado setNome, que recebe um nome e o guarda
no atributo nome do objeto, e o getNome que retorna o valor do atributo nome do objeto.
</p>
<p>
Podemos notar também o uso do '$this' para acessar o atributo do objeto dentro da classe. O '$this' representa o próprio objeto da classe,
então quando escrevemos '$this->nome' estamos dizendo que esse é o atributo nome do objeto que está chamando esse método.
</p>
<p>
Geralmente os atributos de uma classe são todos ou private (privado: só um objeto da classe pode acessa-lo)
ou protected (protegido: somente um objeto da classe ou suas filhas podem acessar) por segurança.
Os métodos, dependendo do que fazem, podem ser public (público: podem ser acessados por qualquer um) como os getters e setters.
</p>
<p>
Infelizmente, exite muito mais para se falar sobre POO que não iremos abordar neste workshop e caso queira
aprofundar seu conhecimento você pode consultar o manual do PHP e também alguns bons tutoriais que estão na internet:
<ul class="list-unstyled">
<li><a href="https://code.tutsplus.com/pt/tutorials/object-oriented-php-for-beginners--net-12762" target="_blank" title="PHP Orientado a Objetos para Iniciantes">PHP Orientado a Objetos para Iniciantes</a></li>
<li><a href="http://php.net/manual/pt_BR/language.oop5.php" target="_blank" title="Manual PHP">Manual PHP</a></li>
<li><a href="https://medium.com/emanuelg-blog/programa%C3%A7%C3%A3o-orientada-a-objetos-com-php-criando-nosso-primeiro-objeto-6d6176ab46b0#.85dpoz2f2" target="_blank" title="Série POO PHP">Série POO PHP</a></li>
</ul>
</p>
</div><!-- .col -->
</div><!-- .row -->
</div><!-- .container -->
</article>
<section class="preview-next">
<div class="container">
<div class="row justify-content-md-center">
<div class="col col-md-8">
<a href="programando_em_php.php" class="float-left" title="volta">voltar</a>
<a href="estrutura.php" class="float-right" title="próximo">próximo</a>
</div><!-- .col -->
</div><!-- .row -->
</div><!-- .container -->
</section>
<?php include "footer.php";?>