svn: /phpdoc/pt_BR/trunk/language/oop5/ magic.xml

[email protected] (André Luis Ferreira da Silva Bacci)
Newsgroups php.doc.pt-br
Message-ID <[email protected]>
ae                                       Fri, 03 Apr 2020 21:17:20 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=349607

Log:
Update translation, fix build.

Changed paths:
    U   phpdoc/pt_BR/trunk/language/oop5/magic.xml

Modified: phpdoc/pt_BR/trunk/language/oop5/magic.xml
===================================================================
--- phpdoc/pt_BR/trunk/language/oop5/magic.xml	2020-04-03 21:15:03 UTC (rev 349606)
+++ phpdoc/pt_BR/trunk/language/oop5/magic.xml	2020-04-03 21:17:20 UTC (rev 349607)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 339526 Maintainer: ae Status: ready --><!-- CREDITS: narigone, felipe, lcobucci, fabioluciano -->
+<!-- EN-Revision: 349590 Maintainer: ae Status: ready --><!-- CREDITS: narigone,felipe,lcobucci,fabioluciano,ae -->
  <sect1 xml:id="language.oop5.magic" xmlns="http://docbook.org/ns/docbook">
   <title>Métodos Mágicos</title>
   <para>
@@ -14,6 +14,8 @@
    <link linkend="object.unset">__unset()</link>,
    <link linkend="object.sleep">__sleep()</link>,
    <link linkend="object.wakeup">__wakeup()</link>,
+   <link linkend="object.serialize">__serialize()</link>,
+   <link linkend="object.unserialize">__unserialize()</link>,
    <link linkend="object.tostring">__toString()</link>,
    <link linkend="object.invoke">__invoke()</link>,
    <link linkend="object.set-state">__set_state()</link>,
@@ -25,6 +27,12 @@
    a eles.
   </para>

+  <note>
+   <simpara>
+    Todos os métodos mágicos <emphasis>DECEM</emphasis> ser declarados como <literal>public</literal>
+   </simpara>
+  </note>
+
   <caution>
    <simpara>
     O PHP reserva todas as funções com nomes iniciadas com __ como mágicas.
@@ -44,7 +52,7 @@
     <void/>
    </methodsynopsis>
    <methodsynopsis xml:id="object.wakeup">
-    <type>void</type><methodname>__wakeup</methodname>
+    <modifier>public</modifier> <type>void</type><methodname>__wakeup</methodname>
     <void/>
    </methodsynopsis>

@@ -121,6 +129,107 @@
    </example>
   </sect2>

+  <sect2 xml:id="language.oop5.magic.serialize">
+   <title>
+    <link linkend="object.serialize">__serialize()</link> e
+    <link linkend="object.unserialize">__unserialize()</link>
+   </title>
+
+   <methodsynopsis xml:id="object.serialize">
+    <modifier>public</modifier> <type>array</type><methodname>__serialize</methodname>
+    <void/>
+   </methodsynopsis>
+   <methodsynopsis xml:id="object.unserialize">
+    <modifier>public</modifier> <type>void</type><methodname>__unserialize</methodname>
+    <methodparam><type>array</type><parameter>data</parameter></methodparam>
+   </methodsynopsis>
+
+   <para>
+    <function>serialize</function> verifica se a classe contém uma função
+    com o nome mágico <link linkend="object.serialize">__serialize()</link>. Se sim, essa função é
+    executada antes de qualquer serialização. Ela precisa construir e retornar um array associativo de chaves-valores
+    que representam a forma serializada do objeto. Se o array não for retornado então um erro <classname>TypeError</classname>
+    será lançado.
+   </para>
+   <note>
+    <para>
+     Se ambos <link linkend="object.serialize">__serialize()</link> e <link linkend="object.sleep">__sleep()</link>
+     estiverem definidos no mesmo objeto, somente <link linkend="object.serialize">__serialize()</link> será chamado.
+     <link linkend="object.sleep">__sleep()</link> será ignorado. Se o objeto implementa a interface <link linkend="class.serializable">Serializable</link>,
+     o método <literal>serialize()</literal> da interface será ignorado e o método mágico <link linkend="object.serialize">__serialize()</link>
+     será utilizado.
+    </para>
+   </note>
+   <para>
+    O uso pretendido de <link linkend="object.serialize">__serialize()</link> é definir uma representação arbitrária,
+    amigável, da representação do objeto. Elementos do array podem corresponder a propriedades do objeto diretamente, mas
+    isso não é obrigatório.
+   </para>
+   <para>
+    Inversamente, <function>unserialize</function> verifica a
+    presença da função mágica
+    <link linkend="object.unserialize">__unserialize()</link>. Se presente, essa função será chamada
+    com o array retornado de <link linkend="object.serialize">__serialize()</link>. Ela poderá,
+    então, restaurar as propriedades do objeto a partir do array.
+   </para>
+   <note>
+    <para>
+     Se ambos <link linkend="object.unserialize">__unserialize()</link> e <link linkend="object.wakeup">__wakeup()</link>
+     estiverem definidos, somente <link linkend="object.unserialize">__unserialize()</link> será chamado, e
+     <link linkend="object.wakeup">__wakeup()</link> será ignorado.
+    </para>
+   </note>
+   <note>
+    <para>
+     Esse recurso está disponível desde o PHP 7.4.0.
+    </para>
+   </note>
+   <example>
+    <title>Serialize e unserialize</title>
+    <programlisting role="php">
+<![CDATA[
+<?php
+class Connection
+{
+    protected $link;
+    private $dsn, $username, $password;
+
+    public function __construct($dsn, $username, $password)
+    {
+        $this->dsn = $dsn;
+        $this->username = $username;
+        $this->password = $password;
+        $this->connect();
+    }
+
+    private function connect()
+    {
+        $this->link = new PDO($this->dsn, $this->username, $this->password);
+    }
+
+    public function __serialize(): array
+    {
+        return [
+          'dsn' => $this->dsn,
+          'user' => $this->username,
+          'pass' => $this->password,
+        ];
+    }
+
+    public function __unserialize(array $data): void
+    {
+        $this->dsn = $data['dsn'];
+        $this->username = $data['user'];
+        $this->password = $data['pass'];
+
+        $this->connect();
+    }
+}?>
+]]>
+    </programlisting>
+   </example>
+  </sect2>
+
   <sect2 xml:id="language.oop5.magic.tostring">
    <title><link linkend="object.tostring">__toString()</link></title>
    <methodsynopsis xml:id="object.tostring">
@@ -136,9 +245,9 @@
    </para>
    <warning>
     <simpara>
-     Você não pode lançar uma exceção de dentro do método
-     <link linkend="object.tostring">__toString()</link>. Fazer isso resultará
-     em um erro fatal.
+     Não era possível lançar uma exception de dentro de um método
+     <link linkend="object.tostring">__toString()</link> antes do PHP 7.4.0. Isso gera
+     um erro fatal.
     </simpara>
    </warning>
    <example>
@@ -146,7 +255,7 @@
     <programlisting role="php">
 <![CDATA[
 <?php
-// Declare a simple class
+// Declara uma classe simples
 class TestClass
 {
     public $foo;
@@ -254,7 +363,7 @@
     public $var1;
     public $var2;

-    public static function __set_state($an_array) // As of PHP 5.1.0
+    public static function __set_state($an_array) // Desde o PHP 5.1.0
     {
         $obj = new A;
         $obj->var1 = $an_array['var1'];
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.