mirror of
https://github.com/php/doc-pt_br.git
synced 2026-03-23 22:52:12 +01:00
sync with en rev
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: ced6d2c2bacc02e3048abd4a2ab58d755d09307d Maintainer: leonardolara Status: ready --><!-- CREDITS: felipe, thiago, rogeriopradoj, leonardolara -->
|
||||
<!-- EN-Revision: 7d2dd02b7bdd1f1c3becbe06444c354f5e6f0e34 Maintainer: leonardolara Status: ready --><!-- CREDITS: felipe, thiago, rogeriopradoj, leonardolara -->
|
||||
|
||||
<info xmlns="http://docbook.org/ns/docbook" xml:id="bookinfo">
|
||||
&frontpage.authors;
|
||||
@@ -17,13 +17,6 @@
|
||||
A última versão está disponível atualmente em
|
||||
<link xlink:href="&url.cc.by;">&url.cc.by;</link>.
|
||||
</simpara>
|
||||
<simpara>
|
||||
Se você está interessado na redistribuição ou republicação deste documento
|
||||
como um todo ou em parte, modificado ou não, ou se você tem dúvidas,
|
||||
basta contatar os responsáveis pelo copyright em
|
||||
<link xlink:href="mailto:&email.php.doc.license;">&email.php.doc.license;</link>.
|
||||
Note que este endereço tem suas mensagens preservadas em um arquivo público.
|
||||
</simpara>
|
||||
</legalnotice>
|
||||
|
||||
</info>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: b34210e11d0922cb14a134e244cb5846a3d2ac67 Maintainer: leonardolara Status: ready -->
|
||||
<!-- EN-Revision: c925e1a0ce0659ee1c12d80f9a4a58b10cc4222f Maintainer: leonardolara Status: ready -->
|
||||
<sect1 xml:id="language.oop5.property-hooks" xmlns="http://docbook.org/ns/docbook">
|
||||
<title>Ganchos de Propriedade</title>
|
||||
|
||||
@@ -199,6 +199,72 @@ class Example
|
||||
Em uma propriedade apoiada, omitir um gancho <literal>get</literal> ou<literal>set</literal>
|
||||
significa que o comportamento padrão de leitura ou gravação será usado.
|
||||
</simpara>
|
||||
<note>
|
||||
<simpara>
|
||||
Gachos podem ser definidos ao usar
|
||||
<link linkend="language.oop5.decon.constructor.promotion">promoção de propriedade de construtor</link>.
|
||||
No entando, quando isso é feito, os valores fornecidos
|
||||
ao construtor precisam ter o tipo associado à propriedade correspondido,
|
||||
independentemente do que o gancho <literal>set</literal> possa permitir.
|
||||
</simpara>
|
||||
<simpara>
|
||||
Considere o seguinte:
|
||||
</simpara>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
class Example
|
||||
{
|
||||
public function __construct(
|
||||
public private(set) DateTimeInterface $created {
|
||||
set (string|DateTimeInterface $value) {
|
||||
if (is_string($value)) {
|
||||
$value = new DateTimeImmutable($value);
|
||||
}
|
||||
$this->created = $value;
|
||||
}
|
||||
},
|
||||
) {
|
||||
}
|
||||
}
|
||||
]]>
|
||||
</programlisting>
|
||||
<simpara>
|
||||
Internamente, o mecanismo decompõe para o seguinte:
|
||||
</simpara>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
class Example
|
||||
{
|
||||
public private(set) DateTimeInterface $created {
|
||||
set (string|DateTimeInterface $value) {
|
||||
if (is_string($value)) {
|
||||
$value = new DateTimeImmutable($value);
|
||||
}
|
||||
$this->created = $value;
|
||||
}
|
||||
}
|
||||
|
||||
public function __construct(
|
||||
DateTimeInterface $created,
|
||||
) {
|
||||
$this->created = $created;
|
||||
}
|
||||
}
|
||||
]]>
|
||||
</programlisting>
|
||||
<simpara>
|
||||
Quaisquer tentativas de definir a propriedade fora do construtor
|
||||
permitirão valores do tipo <type>string</type> ou <interfacename>DateTimeInterface</interfacename>
|
||||
mas o construtor permitirá apenas <interfacename>DateTimeInterface</interfacename>.
|
||||
Isto acontece porque o tipo definido para a propriedade (<interfacename>DateTimeInterface</interfacename>)
|
||||
é usado como o tipo do parâmetro dentro da assinatura do construtor, não importando o que
|
||||
o gancho <literal>set</literal> permite.
|
||||
</simpara>
|
||||
<simpara>
|
||||
Se este tipo de comportamento do construtor for necessário, a promoção de
|
||||
propriedade de construtor não pode ser usada.
|
||||
</simpara>
|
||||
</note>
|
||||
</sect2>
|
||||
<sect2 xml:id="language.oop5.property-hooks.virtual">
|
||||
<title>Propriedades virtuais</title>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 6564f8d246764451b71234921ed156376a4b4219 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<!-- EN-Revision: b5f0c19bec9f70f1cbdc1480b3f3c92c608489d1 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
|
||||
<sect1 xml:id="language.oop5.traits" xmlns="http://docbook.org/ns/docbook">
|
||||
<title>Traits</title>
|
||||
<para>
|
||||
@@ -420,12 +420,21 @@ class C2
|
||||
use Counter;
|
||||
}
|
||||
|
||||
$o = new C1(); $o->inc(); // exibe 1
|
||||
$p = new C2(); $p->inc(); // exibe 1
|
||||
$o = new C1();
|
||||
$o->inc();
|
||||
$p = new C2();
|
||||
$p->inc();
|
||||
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
1
|
||||
1
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
<example xml:id="language.oop5.traits.static.ex2">
|
||||
<title>Métodos Estáticos</title>
|
||||
@@ -446,41 +455,67 @@ class Example
|
||||
use StaticExample;
|
||||
}
|
||||
|
||||
Example::doSomething();
|
||||
echo Example::doSomething();
|
||||
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
Fazendo algo
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
<example xml:id="language.oop5.traits.static.ex3">
|
||||
<title>Propriedades Estáticas</title>
|
||||
<caution>
|
||||
<simpara>
|
||||
Antes do PHP 8.3.0, propriedades estáticas definidas em um trait eram compartilhadas por um única hierarquia de classes
|
||||
que usavam o trait. A partir do PHP 8.3.0, a propriedade estática do trait inserida na classe filha
|
||||
substitui a propriedade estática que a classe filha herdou da classe pai deinida em conjunto com
|
||||
o mesmo trait.
|
||||
Antes do PHP 8.3.0, propriedades estáticas definidas em um trait eram compartilhadas
|
||||
por todas as classes na mesma herança hierárquica que usavam o trait.
|
||||
A partir do PHP 8.3.0, se uma classe filha usa um trait com uma propriedade estática,
|
||||
ela será considerada distinta daquela definida na classe pai.
|
||||
</simpara>
|
||||
</caution>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
trait StaticExample
|
||||
trait T
|
||||
{
|
||||
public static $static = 'foo';
|
||||
public static $counter = 1;
|
||||
}
|
||||
|
||||
class Example
|
||||
class A
|
||||
{
|
||||
use StaticExample;
|
||||
use T;
|
||||
|
||||
public static function incrementCounter()
|
||||
{
|
||||
static::$counter++;
|
||||
}
|
||||
}
|
||||
|
||||
echo Example::$static;
|
||||
class B extends A
|
||||
{
|
||||
use T;
|
||||
}
|
||||
|
||||
A::incrementCounter();
|
||||
|
||||
echo A::$counter, "\n";
|
||||
echo B::$counter, "\n";
|
||||
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs.83;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
2
|
||||
1
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
</sect2>
|
||||
|
||||
@@ -562,10 +597,16 @@ class ConstantsExample {
|
||||
}
|
||||
|
||||
$example = new ConstantsExample;
|
||||
echo $example::FLAG_MUTABLE; // 1
|
||||
echo $example::FLAG_MUTABLE;
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
1
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
<para>
|
||||
Se uma Trait define uma constante, uma classe não pode definir uma constante com
|
||||
@@ -596,8 +637,10 @@ class ConstantsExample {
|
||||
<title>Métodos finais</title>
|
||||
<simpara>
|
||||
A partir do PHP 8.3.0, o modificador <link linkend="language.oop5.final">final</link>
|
||||
pode ser aplicado a métodos importados de traits com o uso do operador <literal>as</literal>,
|
||||
que permite a modificação da visibilidade de método originária do trait na classe onde ele é usado.
|
||||
pode ser aplicado, com o uso do operador <literal>as</literal>,
|
||||
a métodos importados de traits. Isto pode ser usado para evitar que classes filhas
|
||||
substituam o método. Entretanto, a classe que usa o trait ainda poderá
|
||||
substituir o método.
|
||||
</simpara>
|
||||
<example xml:id="language.oop5.traits.final-methods.example">
|
||||
<title>Definindo um método originário de um trait como <literal>final</literal></title>
|
||||
@@ -616,20 +659,24 @@ trait ConstantsTrait
|
||||
class FinalExampleA
|
||||
{
|
||||
use CommonTrait {
|
||||
CommonTrait::method as final; // O 'final' evitará que classes filhas
|
||||
// substituam o método
|
||||
CommonTrait::method as final; // O 'final' evita que classes filhas substituam o método
|
||||
}
|
||||
}
|
||||
|
||||
class FinalExampleB extends FinalExampleA
|
||||
{
|
||||
public function method() {} // Fatal error: Cannot override final method
|
||||
// FinalExampleA::method()
|
||||
public function method() {}
|
||||
}
|
||||
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
&example.outputs.similar;
|
||||
<screen>
|
||||
<![CDATA[
|
||||
Fatal error: Cannot override final method FinalExampleA::method() in ...
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
</sect2>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user