Files
archived-doc-pt-br/reference/var/functions/debug-zval-dump.xml
2024-10-29 08:47:44 -03:00

183 lines
6.1 KiB
XML
Executable File

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 2a5223230bf6177c225003ca30c63f48ef266cc0 Maintainer: leonardolara Status: ready --><!-- CREDITS: felipe,leonardolara -->
<refentry xml:id="function.debug-zval-dump" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>debug_zval_dump</refname>
<refpurpose>Exibe na saída uma representação em string de uma estrutura zval interna</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>void</type><methodname>debug_zval_dump</methodname>
<methodparam><type>mixed</type><parameter>value</parameter></methodparam>
<methodparam rep="repeat"><type>mixed</type><parameter>values</parameter></methodparam>
</methodsynopsis>
<para>
Descarrega para a saída uma representação em string de uma estrutura zval interna (valor Zend).
Muito útil para entender ou depurar detalhes de implementação do
motor Zend ou de extensões PHP.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>value</parameter></term>
<listitem>
<para>
A variável ou valor a exibir.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>values</parameter></term>
<listitem>
<para>
Mais variáveis ou valores a exibir.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
&return.void;
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Exemplo de <function>debug_zval_dump</function></title>
<programlisting role="php">
<![CDATA[
<?php
$var1 = 'Olá,';
$var1 .= ' Mundo';
$var2 = $var1;
debug_zval_dump($var1);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
string(10) "Olá, Mundo" refcount(3)
]]>
</screen>
</example>
</para>
<note>
<title>Entendendo o <literal>refcount</literal> (contagem de referências)</title>
<para>
O valor de <literal>refcount</literal> mostrado por este função pode ser
surpreendente sem um entendimento detalhado da implementação interna do motor.
</para>
<para>
O Motor Zend usa contagem de referência para dois propósitos diferentes:
</para>
<para>
<simplelist>
<member>
Otimização de uso de memória usando a técnica chamada "cópia na escrita",
onde múltiplas variáveis com o mesmo valor apontam para o mesma posição
na memória. Quando alguma dessas variáveis é modificada, ela é apontada para uma
nova cópia na memória, e a contagem de referências na original é diminuída em 1.
</member>
<member>
Rastrear variáveis que foram atribuídas ou passadas por referência (consulte
<link linkend="language.references">Referências</link>). Esta contagem de
referências é armazenada em um zval de referência separado, apontando para o zval
correspondente ao valor atual. Este zval adicional atualmente não é mostrado pela função
<function>debug_zval_dump</function>.
</member>
</simplelist>
</para>
<para>
Como a função <function>debug_zval_dump</function> recebe suas entradas como
parâmetros normais, passados por valor, a técnica de cópia na escrita será usada
para passá-los: em vez de copiar os dados, a contagem de referências será adicionada
em uma unidade durante toda a duração da chamada à função. Se a função modificasse o
parâmetro depois de recebê-lo, então seria feita uma cópia; como ela não modifica,
ela irá mostrar uma contagem uma unidade acima em relação ao escopo que a chamou.
</para>
<para>
A passagem de parâmetros também evita que <function>debug_zval_dump</function>
mostre variáveis que foram atribuídas por referência. Para ilustrar,
considere uma versão levemente modificada do exemplo acima:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$var1 = 'Olá,';
$var1 .= ' Mundo';
// Aponta três variáveis como referências ao mesmo valor
$var2 =& $var1;
$var3 =& $var1;
debug_zval_dump($var1);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
string(10) "Olá, Mundo" refcount(2)
]]>
</screen>
</informalexample>
</para>
<para>
Embora <varname>$var1</varname>, <varname>$var2</varname> e
<varname>$var3</varname> estejam ligadas como referências, apenas o
<emphasis>valor</emphasis> é passado a <function>debug_zval_dump</function>.
Este valor é usado uma vez pelo conjunto de referências, e uma vez dentro de
<function>debug_zval_dump</function>, por isso mostra uma contagem de 2.
</para>
<para>
Complicações adicionais aparecem por conta de otimizações implementadas no motor para
diferentes tipos de dados. Alguns tipos como inteiros não usam "cópia na escrita",
por isso não exibem nenhuma contagem de referência. Em outros casos, a contagem mostra cópias
extras usadas internamente, como quando uma string ou array literais são armazenados como
parte de uma instrução de código.
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>var_dump</function></member>
<member><function>debug_backtrace</function></member>
<member><link linkend="language.references">Referências</link></member>
<member><link xlink:href="&url.derick.references;">Referências Explicadas (por Derick Rethans)</link></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->