sunc with en rev

This commit is contained in:
Leonardo Lara Rodrigues
2025-02-22 12:53:16 -03:00
parent f69924726f
commit bbff153082
13 changed files with 310 additions and 224 deletions

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?><!-- EN-Revision: b1b039696eedcc82e9c1144eeecbfc0a8a1b3859 Maintainer: leonardolara Status: ready -->
<?xml version="1.0" encoding="utf-8"?><!-- EN-Revision: 51f07182abc3960da16e611ae6f5636d7559b871 Maintainer: leonardolara Status: ready -->
<sect1 xml:id="migration84.incompatible" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Alterações Incompatíveis com Versões Anteriores</title>
@@ -359,6 +359,16 @@
</para>
</sect3>
<sect3 xml:id="migration84.incompatible.new-warnings-exceptions.session">
<title>Session</title>
<simpara>
Definir um valor não positivo para <link linkend="ini.session.gc-divisor">session.gc_divisor</link>
ou um valor negativo para <link linkend="ini.session.gc-probability">session.gc_probability</link>
agora emite um alerta.
</simpara>
</sect3>
<sect3 xml:id="migration84.incompatible.new-warnings-exceptions.simplexml">
<title>SimpleXML</title>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: be3338bf720808467447fdcdd6cab9d3e8d821bc Maintainer: ae Status: ready --><!-- CREDITS: felipeklerkyahoo.com.br,ae,geekcom,vanildosouto,leonardolara -->
<!-- EN-Revision: 8d0b3a6ff0419e1d25384a942fd3d3dbcc2eb5f9 Maintainer: leonardolara Status: ready --><!-- CREDITS: felipeklerkyahoo.com.br,ae,geekcom,vanildosouto,leonardolara -->
<appendix xml:id="resource" xmlns="http://docbook.org/ns/docbook">
<title>Lista de tipos de recursos no PHP</title>
<para>
@@ -13,7 +13,7 @@
<tgroup cols="5">
<colspec colwidth='1*'/>
<colspec colwidth='1*'/>
<colspec colwidth='1.4*'/>
<colspec colwidth='2*'/>
<colspec colwidth='1*'/>
<colspec colwidth='1*'/>
<thead>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 9e2d8231b5d8a3795b365c6770fab288e59e6249 Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
<!-- EN-Revision: d35d7d811ccf7662eefe4f23ff1cabc727a917ca Maintainer: leonardolara Status: ready --><!-- CREDITS: leonardolara -->
<chapter xml:id="features.dtrace" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Instrumentação dimâmica DTrace</title>
@@ -11,32 +11,32 @@
disponível em um número de plataformas incluindo Solaris, macOS,
Oracle Linux e BSD. DTrace pode instrumentar comportamento do sistema operacional
e execução de programa de usuário. Ele pode exibir valores de argumentos e ser
usado para inferir estatísticas de desempenho. Os sensores são monitorados pos scripts
usado para inferir estatísticas de desempenho. As sondas são monitorados pos scripts
criados pelo usuário escritos na linguagem própria do DTrace (D). Isto
permite uma análise eficiente de pontos de dados.
</para>
<para>
Sensores PHP que não estão monitorados ativamente por um script
Sondas PHP que não estão monitorados ativamente por um script
D do usuário não contêm código instrumentado, então não há
degradação de desempenho durante a execução normal da aplicação.
Sensores que estão sendo monitorados incorrem em uma sobrecarga pequena o suficiente
Sondas que estão sendo monitoradas incorrem em uma sobrecarga pequena o suficiente
para permitir monitoramento pelo DTrace em sistemas ativos em fase de produção.
</para>
<para>
PHP incorpora sensores com "Instrumentação Estaticamente Definida no Nível de Usuário" (USDT em inglês)
que são ativados em tempo de execução. Por exemplo, quando um script D
está monitorando o sensor de <literal>function-entry</literal> do PHP, então
a cada momento que uma função do PHP é chamada, este sensor é disparado e
PHP incorpora sondas com "Instrumentação Estaticamente Definida no Nível de Usuário" (USDT em inglês)
que são ativadas em tempo de execução. Por exemplo, quando um script D
está monitorando a sonda de <literal>function-entry</literal> do PHP,
a cada momento que uma função do PHP é chamada, esta sonda é disparada e
o código de ação do script D associado é executado. Este código de ação
poderia, por exemplo, imprimir argumentos de sensor como a localização do arquivo-fonte
poderia, por exemplo, imprimir argumentos de sonda como a localização do arquivo-fonte
da função PHP. Ou a ação poderia agregar dados como
o númedo de vezes que cada função é chamada.
</para>
<para>
Apenas os sensores USDT do PHP são descritas aqui. Refira-se à literatura externa do Dtrace,
Apenas as sondas USDT do PHP são descritas aqui. Refira-se à literatura externa do Dtrace,
tanto geral quanto específica do sistema operacional, para entender como
o DTrace pode ser usado para instrumentar funções arbitrárias, e como ele pode ser
usado para instrumentar comportamento do sistema operacional. Note que nem todas as
@@ -44,7 +44,7 @@
</para>
<para>
Os sensores estáticos do Dtrace no PHP podem alternativamente ser utilizados com a
As sondas estáticas do Dtrace no PHP podem alternativamente ser utilizadas com a
ferramenta SystemTap de algumas distribuições Linux.
</para>
</sect1>
@@ -52,12 +52,12 @@
<sect1 xml:id="features.dtrace.dtrace">
<title>Usando PHP e DTrace</title>
<para>
O PHP pode ser configuracom com sensores estáticos do DTrace em plataformas que
O PHP pode ser configurado com sondas estáticas do DTrace em plataformas que
suportam a Instrumentação Dinâmica do DTrace.
</para>
<sect2 xml:id="features.dtrace.install">
<title>Configurando o PHP para Sensores Estáticos DTrace</title>
<title>Configurando o PHP para Sondas Estáticas DTrace</title>
<para>
Refira-se à documentação externa específica da plataforma para habilitar
@@ -91,22 +91,25 @@
</informalexample>
</para>
<para>
Isto habilita sensores estáticos no núcleo do PHP. Quaisquer extensões PHP
que fornecem seus próprios sensores devem ser construídas separadamente como
Isto faz com que as sondas estáticas estejam disponíveis no núcleo do PHP. Quaisquer extensões PHP
que fornecem seus próprios sondas devem ser construídas separadamente como
extensões compartilhadas.
</para>
<para>
Para habilitar as sondas, defina a variável de ambiente <option>USE_ZEND_DTRACE=1</option> para os processos alvos do PHP.
</para>
</sect2>
<sect2 xml:id="features.dtrace.static-probes">
<title>Sensores Estáticos DTrace no Núcleo do PHP</title>
<title>Sondas Estáticos DTrace no Núcleo do PHP</title>
<table>
<title>Os sensores estáticos a seguir estão disponíveis no PHP</title>
<title>As sondas estáticos a seguir estão disponíveis no PHP</title>
<tgroup cols="2">
<thead>
<row>
<entry>Nome do Sensor</entry>
<entry>Descrição do Sensor</entry>
<entry>Argumentos do Sensor</entry>
<entry>Nome da Sonda</entry>
<entry>Descrição da Sonda</entry>
<entry>Argumentos da Sonda</entry>
</row>
</thead>
<tbody>
@@ -171,14 +174,14 @@
</tgroup>
</table>
<para>
Extensões de PHP podem também conter sensores estáticos adicionais.
Extensões de PHP podem também conter sondas estáticas adicionais.
</para>
</sect2>
<sect2 xml:id="features.dtrace.list-probes">
<title>Listando os Sensores Estáticos DTrace no PHP</title>
<title>Listando As Sondas Estáticas DTrace no PHP</title>
<para>
Para listar os sensores disponíveis, inicie um processo PHP e então execute:
Para listar as sondas disponíveis, inicie um processo PHP e então execute:
<informalexample>
<programlisting>
<![CDATA[
@@ -230,7 +233,7 @@
</para>
<para>
Se um processo PHP não estiver em execução, então nenhum sensor PHP será mostrado.
Se um processo PHP não estiver em execução, então nenhuma sonda PHP será mostrada.
</para>
</sect2>
@@ -239,7 +242,7 @@
<para>
Este exemplo mostra o básico da linguagem D de scripts DTrace.
<example>
<title>Arquivo <filename>all_probes.d</filename> para instrumentar todos os Sensores Estáticos PHP com DTrace</title>
<title>Arquivo <filename>all_probes.d</filename> para instrumentar todas as Sondas Estáticas do PHP com DTrace</title>
<programlisting>
<![CDATA[
#!/usr/sbin/dtrace -Zs
@@ -338,12 +341,12 @@ php*:::request-startup
Este script usa a opção <literal>-Z</literal> para a aplicação
<filename>dtrace</filename>, permitindo que ela seja executada quando não
há processo PHP em execução. Se esta opção fosse omitida, o script
iria terminar imediatamente porque ele saberia que nenhum dos sensores
a serem monitorados existiriam.
iria terminar imediatamente porque ele saberia que nenhuma das sondas
a serem monitoradas existiriam.
</para>
<para>
O script instrumenta todos os pontos de sensores estáticos do núcleo do PHP durante toda a
O script instrumenta todos os pontos de sondas estáticas do núcleo do PHP durante toda a
duração de um script PHP em execução. Execute o script D:
<informalexample>
<programlisting>
@@ -356,7 +359,7 @@ php*:::request-startup
<para>
Executa um script PHP ou aplicação. O script D de monitoramento terá
como saída os argumentos de cada um dos sensores quando for disparado.
como saída os argumentos de cada uma das sondas quando for disparado.
</para>
<para>
@@ -365,9 +368,9 @@ php*:::request-startup
</para>
<para>
Em máquinas com múltiplas CPUs, pode parecer que os sensor estão em ordem
não sequencial. Isto depende de qual CPU está processando os sensores,
e como as threads migram atráves dos CPUs. Mostrar os timestamps dos sensores
Em máquinas com múltiplas CPUs, pode parecer que as sondas estão em ordem
não sequencial. Isto depende de qual CPU está processando as sondas,
e como as threads migram atráves dos CPUs. Mostrar os timestamps das sondas
irá ajudar a reduzir a confusão, por exemplo:
<informalexample>
<programlisting>
@@ -392,10 +395,10 @@ php*:::function-entry
</sect1>
<sect1 xml:id="features.dtrace.systemtap">
<title>Usando SystemTap com Sensores Estáticos DTrace</title>
<title>Usando SystemTap com Sondas Estáticas DTrace</title>
<para>
Em algumas distribuições Linux, o utilitário SystemTap de instrumentação pode ser
usado para instrumentar sensores estáticos do PHP. Isso está disponível no
usado para instrumentar sondas estáticas do PHP. Isso está disponível no
PHP 5.4.20 e PHP 5.5.
</para>
@@ -414,7 +417,7 @@ php*:::function-entry
</para>
<para>
Instale o PHP com os sensores DTrace habilitados:
Instale o PHP com as sondas DTrace habilitadas:
<informalexample>
<programlisting role="shell">
<![CDATA[
@@ -427,10 +430,10 @@ php*:::function-entry
</sect2>
<sect2 xml:id="features.dtrace.systemtap-list-probes">
<title>Listando os Sensores Estáticos com SystemTap</title>
<title>Listando as Sondas Estáticas com SystemTap</title>
<para>
Os sensores estáticos em PHP podem ser listados usando <filename>stap</filename>:
As sondas estáticas em PHP podem ser listados usando <filename>stap</filename>:
<informalexample>
<programlisting>
<![CDATA[
@@ -467,7 +470,7 @@ process("sapi/cli/php").provider("php").mark("request__startup")
<para>
<example>
<title><filename>all_probes.stp</filename> para instrumentação de todos os Sensores Estáticos do PHP com SystemTap</title>
<title><filename>all_probes.stp</filename> para instrumentação de todos as Sondas Estáticas do PHP com SystemTap</title>
<programlisting role="shell">
<![CDATA[
probe process("sapi/cli/php").provider("php").mark("compile__file__entry") {
@@ -537,7 +540,7 @@ probe process("sapi/cli/php").provider("php").mark("request__startup") {
</example>
</para>
<para>
O script acima irá instrumentar todos os pontos de sensores estáticos do núcleo do PHP
O script acima irá instrumentar todos os pontos de sondas estáticas do núcleo do PHP
durante toda a duração de um script PHP em execução:
<informalexample>
<programlisting>

View File

@@ -1,22 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: e49940b757b35b8ef26bb64380c231eda7b49fc4 Maintainer: lhsazevedo Status: ready --><!-- CREDITS: fabioluciano,geekcom,lhsazevedo -->
<!-- EN-Revision: 44ae7cb94991c11c93bc23f8a6544f81bb36cf1a Maintainer: leonardolara Status: ready --><!-- CREDITS: fabioluciano,geekcom,lhsazevedo,leonardolara -->
<sect1 xml:id="control-structures.foreach" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>foreach</title>
<?phpdoc print-version-for="foreach"?>
<para>
O construtor <literal>foreach</literal> fornece uma maneira fácil de
iterar sobre arrays. O <literal>foreach</literal> funciona somente em arrays
e objetos, e emitirá um erro ao tentar usá-lo em uma variável
com um tipo de dado diferente ou em uma variável não inicializada. Possui
duas sintaxes:
iterar sobre <type>array</type>s e objetos <interfacename>Traversable</interfacename>.
O <literal>foreach</literal> emitirá um erro quando usado com
uma variável contendo um tipo de dado diferente ou com uma variável não inicializada.
<informalexample>
<simpara>
<literal>foreach</literal> pode, opcionalmente, obter a chave (<literal>key</literal>) de cada elemento:
</simpara>
<programlisting>
<![CDATA[
foreach (iterable_expression as $valor)
statement
foreach (iterable_expression as $chave => $valor)
statement
foreach (expressão_iterável as $valor) {
lista_de_instruções
}
foreach (expressão_iterável as $chave => $valor) {
lista_de_instruções
}
]]>
</programlisting>
</informalexample>
@@ -40,160 +44,88 @@ foreach (iterable_expression as $chave => $valor)
<link linkend="language.oop5.iterations">customizar a iteração em objetos</link>.
</simpara>
<para>
Para modificar diretamente elementos de um array dentro de um laço, preceda
<literal>$valor</literal> com &amp;. Neste caso, o valor será atribuído por
<link linkend="language.references">referência</link>.
<informalexample>
<programlisting role="php">
<example>
<title>Usos comuns de <literal>foreach</literal></title>
<programlisting role="php">
<![CDATA[
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$valor) {
$valor = $valor * 2;
}
// $arr agora é array(2, 4, 6, 8)
unset($valor); // quebra a referência com o último elemento
?>
]]>
</programlisting>
</informalexample>
</para>
<warning>
<para>
A referência ao <literal>$valor</literal> e o último elemento do array
permanecerá inalterado mesmo após a iteração do <literal>foreach</literal>.
É recomendado destruí-lo utilizando a função <function>unset</function>.
Caso contrário você experienciará o seguinte comportamento:
</para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$valor) {
$valor = $valor * 2;
}
// $arr agora é array(2, 4, 6, 8)
/* Examplo: somente valor */
// sem um unset($valor), $valor continuará como referência ao último item: $arr[3]
$array = [1, 2, 3, 17];
foreach ($arr as $chave => $valor) {
// $arr[3] será atualizado com cada valor de $arr...
echo "{$chave} => {$valor} ";
print_r($arr);
}
// ...até que, o segundo e último valor é copiado para o último valor
// saída:
// 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 )
// 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 )
// 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
// 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
?>
]]>
</programlisting>
</informalexample>
</warning>
<para>
É possível iterar o valor de um array constante por referência
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
foreach (array(1, 2, 3, 4) as &$valor) {
$valor = $valor * 2;
}
?>
]]>
</programlisting>
</informalexample>
</para>
<para>
<note>
<para>
O <literal>foreach</literal> não possui suporte a habilidade
de suprimir mensagens de erro utilizando
<literal linkend="language.operators.errorcontrol">@</literal>.
</para>
</note>
</para>
<para>
Mais alguns exemplos para demonstrar o uso:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
/* Exemplo foreach1: somente valores */
$a = array(1, 2, 3, 17);
foreach ($a as $v) {
echo "Valor atual de \$a: $v.\n";
foreach ($array as $value) {
echo "Elemento atual de \$array: $value.\n";
}
/* Exemplo foreach 2: valor com acesso manual (apenas ilustrativo) */
/* Examplo: chave e valor */
$a = array(1, 2, 3, 17);
$i = 0; /* apenas para ilustrar */
foreach ($a as $v) {
echo "\$a[$i] => $v.\n";
$i++;
}
/* Exemplo foreach 3: chave e valor */
$a = array(
$array = [
"um" => 1,
"dois" => 2,
"três" => 3,
"dezessete" => 17
);
];
foreach ($a as $k => $v) {
echo "\$a[$k] => $v.\n";
foreach ($array as $key => $value) {
echo "Chave: $key => Valor: $value\n";
}
/* Exemplo foreach 4: arrays multi dimensionais */
$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";
/* Examplo: arrays chave-valor multidimensionais */
$grid = [];
$grid[0][0] = "a";
$grid[0][1] = "b";
$grid[1][0] = "y";
$grid[1][1] = "z";
foreach ($a as $v1) {
foreach ($v1 as $v2) {
echo "$v2\n";
foreach ($grid as $y => $row) {
foreach ($row as $x => $value) {
echo "Valor na posição x=$x e y=$y: $value\n";
}
}
/* Exemplo foreach 5: arrays dinâmicos */
/* Examplo: arrays dinâmicos */
foreach (array(1, 2, 3, 4, 5) as $v) {
echo "$v\n";
foreach (range(1, 5) as $value) {
echo "$value\n";
}
?>
]]>
</programlisting>
</informalexample>
</para>
</programlisting>
</example>
<note>
<para>
<literal>foreach</literal> não suporta a capacidade de
supressão de mensagens de erro usando o operador
<link linkend="language.operators.errorcontrol"><literal>@</literal></link>.
</para>
</note>
<sect2 xml:id="control-structures.foreach.list">
<title>Desempacotando arrays aninhados com o construtor list()</title>
<title>Desempacotando arrays aninhados</title>
<?phpdoc print-version-for="foreach.list"?>
<para>
É possível iterar sobre um array de arrays e desempacotar
arrays aninhados em variáveis do laço fornecendo o construtor <function>list</function>
como valor.
É possível iterar sobre um array de arrays e desempacotar o array aninhado
em variáveis do laço usando
<link linkend="language.types.array.syntax.destructuring">desestruturação de array</link>
através de <literal>[]</literal> ou usando o contrutor de linguagem <function>list</function>
como o valor.
<note>
<simpara>
Observe que
<link linkend="language.types.array.syntax.destructuring">desestruturação de array</link>
através de <literal>[]</literal> só é possível a partir do PHP 7.1.0.
</simpara>
</note>
</para>
<para>
Por exemplo:
<informalexample>
<simpara>
Em ambos os exemplos a seguir, <literal>$a</literal> será definida para
o primeiro elemento do array aninhado e <literal>$b</literal>
conterá o segundo elemento:
</simpara>
<programlisting role="php">
<![CDATA[
<?php
@@ -202,9 +134,11 @@ $array = [
[3, 4],
];
foreach ($array as [$a, $b]) {
echo "A: $a; B: $b\n";
}
foreach ($array as list($a, $b)) {
// $a contém o primeiro elemento do array aninhado,
// e $b contém o segundo elemento.
echo "A: $a; B: $b\n";
}
?>
@@ -221,22 +155,26 @@ A: 3; B: 4
</para>
<para>
Pode-se se fornecer menos elementos ao construtor <function>list</function> aos que
existem no array aninhado, neste caso, os valores do array que sobrarem serão
ignorados.
Ao fornecer menos variáveis que o número de elementos no array,
os elementos restantes serão ignorados.
Da mesma forma, elementos podem ser pulados usando uma vírgula:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$array = [
[1, 2],
[3, 4],
[1, 2, 3],
[3, 4, 6],
];
foreach ($array as list($a)) {
// Veja que não existe $b aqui.
echo "$a\n";
foreach ($array as [$a, $b]) {
// Observe que não existe $c aqui.
echo "$a $b\n";
}
foreach ($array as [, , $c]) {
// Pulando $a e $b
echo "$c\n";
}
?>
]]>
@@ -244,8 +182,10 @@ foreach ($array as list($a)) {
&example.outputs;
<screen>
<![CDATA[
1
3
1 2
3 4
5
6
]]>
</screen>
</informalexample>
@@ -264,7 +204,7 @@ $array = [
[3, 4],
];
foreach ($array as list($a, $b, $c)) {
foreach ($array as [$a, $b, $c]) {
echo "A: $a; B: $b; C: $c\n";
}
?>
@@ -273,7 +213,6 @@ foreach ($array as list($a, $b, $c)) {
&example.outputs;
<screen>
<![CDATA[
Notice: Undefined offset: 2 in example.php on line 7
A: 1; B: 2; C:
@@ -285,6 +224,90 @@ A: 3; B: 4; C:
</para>
</sect2>
<sect2 xml:id="control-structures.foreach.reference">
<title>foreach e referências</title>
<para>
É possível modificar elementos de array diretamente dentro de um laço precedendo
<literal>$value</literal> com <literal>&amp;</literal>.
Neste caso, o valor será atribuído por
<link linkend="language.references">referência</link>.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$arr = [1, 2, 3, 4];
foreach ($arr as &$value) {
$value = $value * 2;
}
// $arr agora é [2, 4, 6, 8]
unset($value); // quebra a referência com o último elemento
?>
]]>
</programlisting>
</informalexample>
</para>
<warning>
<simpara>
A referência a um <literal>$value</literal> do último elemento do array
permanece mesmo depois do laço <literal>foreach</literal>. É recomendado
destruir essas referências usando <function>unset</function>.
Caso contrário, o comportamento a seguir irá ocorrer:
</simpara>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$arr = [1, 2, 3, 4];
foreach ($arr as &$value) {
$value = $value * 2;
}
// $arr agora é [2, 4, 6, 8]
// sem um unset($value), $value ainda é uma referência ao último item: $arr[3]
foreach ($arr as $key => $value) {
// $arr[3] será atualizado com cada valor de $arr...
echo "{$key} => {$value} ";
print_r($arr);
}
// ...até finalmente o penúltimo valor ser copiado no último valor
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 )
1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 )
2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
]]>
</screen>
</informalexample>
</warning>
<example>
<title>Iterando valores de um array constante por referência</title>
<programlisting role="php">
<![CDATA[
<?php
foreach ([1, 2, 3, 4] as &$value) {
$value = $value * 2;
}
?>
]]>
</programlisting>
</example>
</sect2>
<sect2 role="seealso">
&reftitle.seealso;
<simplelist>
<member><link linkend="language.types.array">array</link></member>
<member><interfacename>Traversable</interfacename></member>
<member><link linkend="language.types.iterable">iterable</link></member>
<member><function>list</function></member>
</simplelist>
</sect2>
</sect1>
<!-- Keep this comment at the end of the file

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: f4f96ef8b2a95283c92ea2183fe1dedf06f3ad22 Maintainer: leonardolara Status: ready --><!-- CREDITS: narigone,felipe,ae,geekcom,leonardolara -->
<!-- EN-Revision: 844190217fcb8ad1d0790ef5a90f7c18fa9d1a9d Maintainer: leonardolara Status: ready --><!-- CREDITS: narigone,felipe,ae,geekcom,leonardolara -->
<chapter xml:id="language.exceptions" xmlns="http://docbook.org/ns/docbook">
<title>Exceções</title>
<para>
@@ -325,16 +325,26 @@ try {
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Uma exceção SpecificException foi lançada, mas os detalhes não importam.
]]>
</screen>
</example>
<example>
<title>Throw as an expression</title>
<para>Only permitted in PHP 8.0.0 and later.</para>
<title>Throw como uma expressão</title>
<para>Permitido apenas no PHP 8.0.0 e posteriores.</para>
<programlisting role="php">
<![CDATA[
<?php
function test() {
do_something_risky() or throw new Exception('It did not work');
do_something_risky() or throw new Exception('Não funcionou');
}
function do_something_risky() {
return false; // Simula falha
}
try {
@@ -345,6 +355,12 @@ try {
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Não funcionou
]]>
</screen>
</example>
</sect1>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: c0fa5077c8862405942d8aac7360c5169558b59b Maintainer: adiel Status: ready --><!-- CREDITS: fabioluciano, rogeriopradoj, adiel -->
<!-- EN-Revision: 6a3ce2f9a191ad00fdd709c249e6dea16df316e3 Maintainer: leonardolara Status: ready --><!-- CREDITS: fabioluciano, rogeriopradoj, adiel, leonardolara -->
<sect1 xml:id="language.oop5.changelog" xmlns="http://docbook.org/ns/docbook">
<title>Lista de alterações da POO</title>
<para>
@@ -16,6 +16,12 @@
</row>
</thead>
<tbody>
<row>
<entry>8.4.0</entry>
<entry>
Adicionado: suporte para <link linkend="language.oop5.property-hooks">Ganchos de Propriedade</link>.
</entry>
</row>
<row>
<entry>8.4.0</entry>
<entry>

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 460f49a93d103cac99556147cb9325b095ca3d42 Maintainer: ae Status: ready --><!-- CREDITS: royopa,ae -->
<!-- EN-Revision: 63b48309213faf184b4c2b6333e19675654aa473 Maintainer: leonardolara Status: ready --><!-- CREDITS: royopa,ae,leonardolara -->
<refentry xml:id="iteratoraggregate.getiterator" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>IteratorAggregate::getIterator</refname>
<refpurpose>Recupera um iterator externo</refpurpose>
<refpurpose>Recupera um iterador ou Traversable externo</refpurpose>
</refnamediv>
<refsect1 role="description">
@@ -13,7 +13,7 @@
<void/>
</methodsynopsis>
<para>
Retorna um iterator externo.
Retorna um iterador ou Traversable externo.
</para>
</refsect1>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: fd65805e83f7dc3b12ab5844cafc4489dc367a27 Maintainer: ae Status: ready --><!-- CREDITS: surfmax,felipe,ae,leonardolara -->
<!-- EN-Revision: c558c3af38874a913c7515bbd49aaf2e689cbdd0 Maintainer: leonardolara Status: ready --><!-- CREDITS: surfmax,felipe,ae,leonardolara -->
<refentry xml:id="function.is-a" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>is_a</refname>
@@ -88,6 +88,15 @@ if (is_a($WF, 'WidgetFactory')) {
<programlisting role="php">
<![CDATA[
<?php
// define uma classe
class WidgetFactory
{
var $oink = 'moo';
}
// cria um novo objeto
$WF = new WidgetFactory();
if ($WF instanceof WidgetFactory) {
echo "\$WF implementa WidgetFactory\n";
}

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 5bc68add3da3cd18c40f851e944b15095d3a26aa Maintainer: marcosmarcolin Status: ready --><!-- CREDITS: marcosmarcolin, leonardolara -->
<!-- EN-Revision: 9dadf74254fa743db43e73ab3f5a3d441c271ab1 Maintainer: leonardolara Status: ready --><!-- CREDITS: marcosmarcolin, leonardolara -->
<refentry xml:id="mysqli.construct" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>mysqli::__construct</refname>
@@ -123,6 +123,11 @@
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
<methodname>mysqli::__construct</methodname> sempre retorna um objeto
que representa a conexão a um servidor MySQL,
independente se teve sucesso ou não.
</para>
<para>
<function>mysqli_connect</function> retorna um objeto que representa a conexão com um servidor MySQL,
&return.falseforfailure;.

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 8a058e9acded067eaa1bd445ed6943158e7311df Maintainer: adiel Status: ready --><!-- CREDITS: adiel -->
<!-- EN-Revision: b3d09b7bb4513a6fc08c9adf8793929cb283acc6 Maintainer: leonardolara Status: ready --><!-- CREDITS: adiel, leonardolara -->
<section xml:id="pdo.installation" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
&reftitle.install;
<procedure xml:id="pdo.install.unix51up">
@@ -26,13 +26,13 @@
Ao instalar o PDO como um módulo compartilhado, o arquivo php.ini precisa
ser atualizado para que a extensão PDO seja carregada automaticamente quando o PHP for executado.
Qualquer driver de banco de dados usado também precisará ser habilitado;
certifique-se de que eles estejam listados após a linha pdo.so, pois o PDO deve
certifique-se de que eles estejam listados após a linha extension=pdo, pois o PDO deve
ser inicializado antes que as extensões específicas do banco de dados possam ser carregadas.
Se o PDO e as extensões de banco de dados foram compilados estaticamente,
esta etapa pode ser ignorada.
<screen>
<![CDATA[
extension=pdo.so
extension=pdo
]]>
</screen>
</para>
@@ -42,21 +42,16 @@ extension=pdo.so
<title>Pessoas usuárias do Windows</title>
<step>
<para>
PDO é habilitado por padrão.
Selecione os outros arquivos DLL e use a função
<function>dl</function> para carregá-los em tempo de execução ou habilite-os no arquivo
&php.ini; abaixo de <filename>php_pdo.dll</filename>. Por exemplo:
&php.ini;. Por exemplo, isto carrega o driver
<link linkend="ref.pdo-sqlite">PDO_SQLITE</link> mas
deixa o driver <link linkend="ref.pdo-odbc">PDO_ODBC</link> comentado:
<screen>
<![CDATA[
extension=php_pdo.dll
extension=php_pdo_firebird.dll
extension=php_pdo_informix.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_oci.dll
extension=php_pdo_oci8.dll
extension=php_pdo_odbc.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
;extension=pdo_odbc
extension=pdo_sqlite
]]>
</screen>
</para>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: c477749c82111cbbdd657a0e98eeaeeec0d90c91 Maintainer: leonardolara Status: ready --><!-- CREDITS: adiel,fernandowobeto,leonardolara -->
<!-- EN-Revision: e0e74c05cb704b614ff6925552884fbffb26bb53 Maintainer: leonardolara Status: ready --><!-- CREDITS: adiel,fernandowobeto,leonardolara -->
<book xml:id="book.reflection" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<?phpdoc extension-membership="core" ?>
@@ -50,6 +50,7 @@
&reference.reflection.reflectionattribute;
&reference.reflection.reflector;
&reference.reflection.reflectionexception;
&reference.reflection.propertyhooktype;
</book>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 16f66c05a4060a7d673ae1c70b656d65009407b0 Maintainer: fernandowobeto Status: ready --><!-- CREDITS: fernandowobeto, leonardolara -->
<!-- EN-Revision: e0e74c05cb704b614ff6925552884fbffb26bb53 Maintainer: leonardolara Status: ready --><!-- CREDITS: fernandowobeto, leonardolara -->
<refentry xml:id="reflectionproperty.ispublic" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>ReflectionProperty::isPublic</refname>
@@ -34,12 +34,29 @@
</note>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<simpara>
Observe que uma propriedade sendo <literal>public</literal> nem sempre
implica que ela é publicamente modificável. Uma propriedade poderia ser virtual sem nenhum
gancho <literal>set</literal>, ou porderia ser <literal>readonly</literal>
e já ter sido modificada, ou poderia ter a
<link linkend="language.oop5.visibility-members-aviz">visibuilidade <literal>set</literal>
definida</link> que é não-pública. Em todos estes casos,
este método retornará &true; mas a propriedade não será modificável.
</simpara>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><methodname>ReflectionProperty::isProtected</methodname></member>
<member><methodname>ReflectionProperty::isProtectedSet</methodname></member>
<member><methodname>ReflectionProperty::isPrivate</methodname></member>
<member><methodname>ReflectionProperty::isPrivateSet</methodname></member>
<member><methodname>ReflectionProperty::isReadOnly</methodname></member>
<member><methodname>ReflectionProperty::isStatic</methodname></member>
</simplelist>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 14dc7c47365f2b71f6c907a5ba5bccf42534d5a9 Maintainer: leonardolara Status: ready -->
<!-- EN-Revision: 2ca1058473429d338de6eb773f268fc18a71d2f9 Maintainer: leonardolara Status: ready -->
<refentry xml:id="function.socket-write" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>socket_write</refname>
@@ -46,8 +46,8 @@
<para>
O parâmetro opcional <parameter>length</parameter> pode especificar um
comprimento alternativo de bytes escritos no soquete. Se esse comprimento for
maior que o comprimento do buffer, ele será truncado silenciosamente para o comprimento
do buffer.
maior que o comprimento de <parameter>data</parameter>,
ele será truncado silenciosamente para o comprimento de <parameter>data</parameter>.
</para>
</listitem>
</varlistentry>
@@ -102,10 +102,11 @@
<note>
<para>
<function>socket_write</function> não escreve necessariamente todos os bytes
do buffer fornecido. É válido que, dependendo dos buffers da rede
etc., apenas uma certa quantidade de dados, mesmo que um byte, seja
escrita, embora o seu buffer seja maior. Deve-se ter atenção para não esquecer
involuntariamente de transmitir o restante dos dados.
do parâmetro <parameter>data</parameter> fornecido. É válido que, dependendo dos buffers
de rede etc., apenas uma certa quantidade de dados, mesmo que um byte, seja escrita,
embora <parameter>data</parameter> seja maior.
Um laço precisa ser usado para assegurar que o resto de <parameter>data</parameter>
seja transmitido.
</para>
</note>
</refsect1>