Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions language/errors.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 7a75b854c8c52226d38397e7e8177e339fdb273f Maintainer: lacatoire Status: ready -->
<chapter xml:id="language.errors" xmlns="http://docbook.org/ns/docbook">
<title>Errori</title>

<sect1 annotations="chunk:false" xml:id="language.errors.intro">
<title>Introduzione</title>

<para>
Purtroppo, per quanto si presti attenzione nella scrittura del codice, gli errori sono una
realtà inevitabile. PHP segnala errori, avvisi e notifiche per molti problemi comuni
di codifica e di runtime, e sapere come rilevare e gestire questi
errori renderà il debug molto più semplice.
</para>
</sect1>

&language.errors.basics;
&language.errors.php7;
</chapter>

<!-- 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
-->
99 changes: 99 additions & 0 deletions language/errors/basics.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: de9c65c91ff1710d8b2d2ec955caea0162679305 Maintainer: lacatoire Status: ready -->

<sect1 xml:id="language.errors.basics" xmlns="http://docbook.org/ns/docbook">
<title>Nozioni di base</title>

<para>
PHP segnala gli errori in risposta a una serie di condizioni di errore interne.
Questi possono essere utilizzati per segnalare diverse condizioni e possono essere
visualizzati e/o registrati nei log come richiesto.
</para>

<para>
Ogni errore generato da PHP include un tipo. Un
<link linkend="errorfunc.constants">elenco di questi tipi di errore</link> è disponibile,
insieme a una breve descrizione del loro comportamento e di come possono essere
causati.
</para>

<sect2 xml:id="language.errors.basics.handling">
<title>Gestione degli errori con PHP</title>

<para>
Se non è impostato alcun gestore di errori, PHP gestirà ogni errore che si verifica
secondo la sua configurazione. Quali errori vengono segnalati e quali vengono
ignorati è controllato dalla direttiva php.ini
<link linkend="ini.error-reporting"><parameter>error_reporting</parameter></link>,
o a runtime chiamando
<function>error_reporting</function>. Si raccomanda vivamente di impostare la
direttiva di configurazione, poiché alcuni errori possono verificarsi prima che
l'esecuzione dello script inizi.
</para>

<para>
In un ambiente di sviluppo, è consigliabile impostare sempre
<link linkend="ini.error-reporting"><parameter>error_reporting</parameter></link>
a <constant>E_ALL</constant>, poiché è necessario essere a conoscenza dei
problemi segnalati da PHP e correggerli. In produzione, è possibile impostare un livello
meno verboso come
<code>E_ALL &amp; ~E_NOTICE &amp; ~E_DEPRECATED</code>, ma
in molti casi <constant>E_ALL</constant> è comunque appropriato, poiché può
fornire un avviso anticipato di potenziali problemi.
</para>

<para>
Ciò che PHP fa con questi errori dipende da altre due direttive php.ini.
<link linkend="ini.display-errors"><parameter>display_errors</parameter></link>
controlla se l'errore viene mostrato come parte dell'output dello script. Questo
dovrebbe essere sempre disabilitato in un ambiente di produzione, poiché può includere
informazioni riservate come le password del database, ma è spesso utile
abilitarlo in sviluppo, poiché garantisce la segnalazione immediata dei problemi.
</para>

<para>
Oltre a visualizzare gli errori, PHP può registrare gli errori nei log quando la direttiva
<link linkend="ini.log-errors"><parameter>log_errors</parameter></link>
è abilitata. Questo registrerà tutti gli errori nel file o nel syslog
definito da
<link linkend="ini.error-log"><parameter>error_log</parameter></link>. Questo
può essere estremamente utile in un ambiente di produzione, poiché è possibile registrare gli errori
che si verificano e poi generare report basati su questi errori.
</para>
</sect2>

<sect2 xml:id="language.errors.basics.user">
<title>Gestori di errori personalizzati</title>

<para>
Se la gestione degli errori predefinita di PHP è inadeguata, è possibile gestire anche molti
tipi di errore con un gestore di errori personalizzato installandolo con
<function>set_error_handler</function>. Anche se alcuni tipi di errore non possono essere
gestiti in questo modo, quelli che lo permettono possono essere gestiti nel modo
più appropriato per lo script: ad esempio, è possibile mostrare una pagina di errore
personalizzata all'utente e poi segnalare in modo più diretto rispetto a un log, come
l'invio di un'e-mail.
</para>
</sect2>
</sect1>

<!-- 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
-->
116 changes: 116 additions & 0 deletions language/errors/php7.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 4bf789e981af0836c41daa16e57ef86c21497faa Maintainer: lacatoire Status: ready -->

<sect1 xml:id="language.errors.php7" xmlns="http://docbook.org/ns/docbook">
<title>Errori in PHP 7</title>

<para>
PHP 7 cambia il modo in cui la maggior parte degli errori viene segnalata da PHP. Invece di segnalare
gli errori attraverso il meccanismo di segnalazione errori tradizionale utilizzato da PHP 5, la maggior
parte degli errori viene ora segnalata lanciando eccezioni <classname>Error</classname>.
</para>

<para>
Come per le eccezioni normali, queste eccezioni <classname>Error</classname>
risaliranno fino a raggiungere il primo blocco
<link linkend="language.exceptions.catch"><literal>catch</literal></link> corrispondente.
Se non ci sono blocchi corrispondenti, verrà chiamato qualsiasi gestore di eccezioni predefinito
installato con <function>set_exception_handler</function>,
e se non c'è un gestore di eccezioni predefinito, l'eccezione verrà
convertita in un errore fatale e gestita come un errore tradizionale.
</para>

<para>
Poiché la gerarchia <classname>Error</classname> non eredita da
<classname>Exception</classname>, il codice che utilizza blocchi
<code>catch (Exception $e) { ... }</code> per gestire le eccezioni non catturate
in PHP 5 non catturerà questi <classname>Error</classname>.
È necessario un blocco <code>catch (Error $e) { ... }</code>
o un gestore <function>set_exception_handler</function>.
</para>

<sect2 xml:id="language.errors.php7.hierarchy">
<title>Gerarchia di <classname>Error</classname></title>

<itemizedlist>
<listitem>
<simpara><classname>Throwable</classname></simpara>
<itemizedlist>
<listitem>
<simpara><classname>Error</classname></simpara>
<itemizedlist>
<listitem>
<simpara><classname>ArithmeticError</classname></simpara>
<itemizedlist>
<listitem>
<simpara><classname>DivisionByZeroError</classname></simpara>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<simpara><classname>AssertionError</classname></simpara>
</listitem>
<listitem>
<simpara><classname>CompileError</classname></simpara>
<itemizedlist>
<listitem>
<simpara><classname>ParseError</classname></simpara>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<simpara><classname>TypeError</classname></simpara>
<itemizedlist>
<listitem>
<simpara><classname>ArgumentCountError</classname></simpara>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<simpara><classname>ValueError</classname></simpara>
</listitem>
<listitem>
<simpara><classname>UnhandledMatchError</classname></simpara>
</listitem>
<listitem>
<simpara><classname>FiberError</classname></simpara>
</listitem>
<listitem>
<simpara><classname>RequestParseBodyException</classname></simpara>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<simpara><classname>Exception</classname></simpara>
<itemizedlist>
<listitem>
<simpara>...</simpara>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</sect2>
</sect1>

<!-- 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
-->
96 changes: 96 additions & 0 deletions language/fibers.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 376d3f9c2ef7fcd64d8b8503d552013acefb8b5b Maintainer: lacatoire Status: ready -->
<chapter xml:id="language.fibers" xmlns="http://docbook.org/ns/docbook">
<title>Fiber</title>

<simplesect xml:id="language.fibers.overview">
<title>Panoramica sulle Fiber</title>
<?phpdoc print-version-for="fiber"?>
<para>
Le Fiber rappresentano funzioni interrompibili con stack completo. Le Fiber possono essere sospese da qualsiasi punto nello stack delle chiamate,
mettendo in pausa l'esecuzione all'interno della fiber fino a quando la fiber non viene ripresa in un secondo momento.
</para>
<para>
Le Fiber mettono in pausa l'intero stack di esecuzione, quindi il chiamante diretto della funzione non ha bisogno di cambiare il modo in cui
invoca la funzione.
</para>
<para>
L'esecuzione può essere interrotta in qualsiasi punto dello stack delle chiamate utilizzando <methodname>Fiber::suspend</methodname>
(ovvero, la chiamata a <methodname>Fiber::suspend</methodname> può trovarsi in una funzione profondamente annidata oppure non
esistere affatto).
</para>
<para>
A differenza dei <classname>Generator</classname> senza stack, ogni <classname>Fiber</classname> ha il proprio stack delle chiamate,
consentendo di metterle in pausa all'interno di chiamate di funzione profondamente annidate. Una funzione che dichiara un punto di interruzione
(ovvero, che chiama <methodname>Fiber::suspend</methodname>) non ha bisogno di cambiare il proprio tipo di ritorno, a differenza di una funzione che utilizza
&yield; che deve restituire un'istanza di <classname>Generator</classname>.
</para>
<para>
Le Fiber possono essere sospese in qualsiasi chiamata di funzione, incluse quelle chiamate dall'interno della VM PHP, come le funzioni
fornite a <function>array_map</function> o i metodi chiamati da &foreach; su un
oggetto <classname>Iterator</classname>.
</para>
<para>
Una volta sospesa, l'esecuzione della fiber può essere ripresa con qualsiasi valore utilizzando <methodname>Fiber::resume</methodname>
o lanciando un'eccezione nella fiber utilizzando <methodname>Fiber::throw</methodname>. Il valore viene restituito
(o l'eccezione viene lanciata) da <methodname>Fiber::suspend</methodname>.
</para>
<note>
<simpara>
Prima di PHP 8.4.0, il cambio di fiber durante l'esecuzione di un
<link linkend="language.oop5.decon.destructor">distruttore</link> di oggetto non era
consentito.
</simpara>
</note>

<example xml:id="language.fiber.example.basic"><!-- {{{ -->
<title>Utilizzo di base</title>
<programlisting role="php">
<![CDATA[
<?php
$fiber = new Fiber(function (): void {
$value = Fiber::suspend('fiber');
echo "Value used to resume fiber: ", $value, PHP_EOL;
});

$value = $fiber->start();

echo "Value from fiber suspending: ", $value, PHP_EOL;

$fiber->resume('test');
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Value from fiber suspending: fiber
Value used to resume fiber: test
]]>
</screen>
</example><!-- }}} -->

</simplesect>

</chapter>

<!-- 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
-->