<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.info.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'it',
  ),
  'this' => 
  array (
    0 => 'function.assert.php',
    1 => 'assert',
    2 => 'Verifica se un\'asserzione &egrave; false',
  ),
  'up' => 
  array (
    0 => 'ref.info.php',
    1 => 'PHP Options/Info Funzioni',
  ),
  'prev' => 
  array (
    0 => 'ref.info.php',
    1 => 'PHP Options/Info Funzioni',
  ),
  'next' => 
  array (
    0 => 'function.assert-options.php',
    1 => 'assert_options',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    'path' => 'reference/info/functions/assert.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.assert" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">assert</h1>
  <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">assert</span> &mdash; <span class="dc-title">Verifica se un&#039;asserzione è <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></span></p>

 </div>
 
 <div class="refsect1 description" id="refsect1-function.assert-description">
  <h3 class="title">Descrizione</h3>
  <p class="para">PHP 5</p>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>assert</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.mixed.php" class="type mixed">mixed</a></span> <code class="parameter">$assertion</code></span>, <span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$description</code><span class="initializer"> = ?</span></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

  <p class="para rdfs-comment">PHP 7</p>
  <div class="methodsynopsis dc-description"><span class="methodname"><strong>assert</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.mixed.php" class="type mixed">mixed</a></span> <code class="parameter">$assertion</code></span>, <span class="methodparam"><span class="type"><a href="class.throwable.php" class="type Throwable">Throwable</a></span> <code class="parameter">$exception</code><span class="initializer"> = ?</span></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

  <p class="para rdfs-comment">
   <span class="function"><strong>assert()</strong></span> verifica l&#039;
   <code class="parameter">assertion</code> data e prende gli opportuni provvedimenti se
   il suo risultato è <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
  </p>
  <div class="refsect2 unknown-31" id="refsect2-function.assert-unknown-31">
   <h4 class="title">Asserzioni tradizionali (PHP 5 e 7)</h4>
   <p class="para">
    Se il parametro <code class="parameter">assertion</code> è una stringa, verrà
    valutata come codice PHP da <span class="function"><strong>assert()</strong></span>.
    I vantaggi di usare le stringhe con <code class="parameter">assertion</code> sono
    meno overhead nella verifica e la visualizzazione dei messaggi
    che contengono <code class="parameter">assertion</code> quando
    questa fallisce. Ciò significa che se si passa una condizione booleana
    come <code class="parameter">assertion</code>, questa condizione non sarà mostrata come
    parametro della funzione di asserzione che può essere definita con la
    funzione <span class="function"><a href="function.assert-options.php" class="function">assert_options()</a></span>, la condizione è convertita
    in una stringa prima di chiamare la funzione handler, e il valore booleano <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>
    viene convertito in una stringa vuota.
   </p>
   <p class="para">
    Le asserzioni dovrebbero essere utilizzate solo per il debug. Si possono
    usare per controlli di coerenza che testano per condizioni che dovrebbero
    essere sempre <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> e che, in caso contrario, indichino errori di programmazione,
    oppure per verificare la presenza o meno di certe caratteristiche, tipo le estensioni,
    oppure certi limiti di sistema o caratteristiche.
   </p>
   <p class="para">
    Le asserzioni non dovrebbero essere utilizzate per le normali operazioni di
    runtime quali il controllo dei parametri di input. Come regola si deve avere
    che il programma debba funzionare correttamente anche disabilitando le regole di 
    asserzione.
   </p>
   <p class="para">
    Il comportamento di <span class="function"><strong>assert()</strong></span> può essere impostato
    tramite <span class="function"><a href="function.assert-options.php" class="function">assert_options()</a></span> oppure tramite .ini-settings come descritto
    nelle pagine del manuale relative a quelle funzioni.
   </p>
   <p class="para">
    La funzione <span class="function"><a href="function.assert-options.php" class="function">assert_options()</a></span> e/o il parametro
    <strong><code><a href="info.constants.php#constant.assert-callback">ASSERT_CALLBACK</a></code></strong> permettono/e
    di attivare una funzione di callback per gestire una asserzione fallita.
   </p>
   <p class="para">
    Le callback di <span class="function"><strong>assert()</strong></span> sono particolarmente utili
    per costruire suite di test poiché permettono di catturare facilmente
    il codice passato all&#039;assert, oltre alle informazioni
    su dove l&#039;assert è scattato. Sebbene quest&#039;ultime informazioni siano
    rilevabili anche con altri metodi, l&#039;uso delle asserzione rende il tutto
    molto più veloce e semplice!
   </p>
   <p class="para">
    Le funzioni di callback devono accettare tre parametri. Il primo
    conterrà il nome del file in cui si trova l&#039;asserzione fallita. Il
    secondo parametro conterrà il numero di linea dell&#039;asserzione fallita, ed
    il terzo parametro conterrà l&#039;espressione dell&#039;asserzione fallita (se
    qualsiasi — valore letterale come 1 o &quot;due&quot; non verrà passato con
    questo parametro). Gli utenti di PHP 5.4.8 e successivi possono anche fornire un quarto
    parametro opzionale, che conterrà la
    <code class="parameter">description</code> data all&#039;<span class="function"><strong>assert()</strong></span>, se
    è stata impostata.
   </p>
  </div>

  <div class="refsect2 unknown-34" id="function.assert.expectations">
   <h4 class="title">Aspettative (solo PHP 7)</h4>
   <p class="para">
    <span class="function"><strong>assert()</strong></span> è un costrutto del linguaggio in PHP 7, consentendo
    la definizione delle aspettative: asserzioni che hanno effetto in ambienti di
    sviluppo e di test, ma sono ottimizzate per avere un costo zero in
    produzione.
   </p>
   <p class="para">
    Mentre <span class="function"><a href="function.assert-options.php" class="function">assert_options()</a></span> può ancora essere utilizzata per controllare
    il comportamento come sopra descritto per ragioni di retrocompatibilità, il codice
    solo per PHP 7 dovrebbe usare le due nuove direttive di configurazione per controllare
    il comportamento di <span class="function"><strong>assert()</strong></span> e non chiamare
    <span class="function"><a href="function.assert-options.php" class="function">assert_options()</a></span>.
   </p>
   <table class="doctable table">
    <caption><strong>
     Direttive di configurazione di PHP 7 per <span class="function"><strong>assert()</strong></span>
    </strong></caption>
    
     <thead>
      <tr>
       <th>Direttiva</th>
       <th>Valore predefinito</th>
       <th>Valori possibili</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>
        <a href="ini.core.php#ini.zend.assertions" class="link">zend.assertions</a>
       </td>
       <td><code class="literal">1</code></td>
       <td>
        <ul class="simplelist">
         <li>
          <code class="literal">1</code>: genera ed esegue il codice (modalità di sviluppo)
         </li>
         <li>
          
          <code class="literal">0</code>: genera il codice ma lo salta in fase di runtime
         </li>
         <li>
          <code class="literal">-1</code>: non genera il codice (modalità di produzione)
         </li>
        </ul>
       </td>
      </tr>

      <tr>
       <td>
        <a href="info.configuration.php#ini.assert.exception" class="link">assert.exception</a>
       </td>
       <td><code class="literal">0</code></td>
       <td>
        <ul class="simplelist">
         <li>
          <code class="literal">1</code>: segnala quando l'asserzione fallisce, o
          sollevando l'oggetto fornito come <code class="parameter">exception</code>
          o sollevando un nuovo oggetto <span class="classname"><a href="class.assertionerror.php" class="classname">AssertionError</a></span> se
          <code class="parameter">exception</code> non è stato fornito
         </li>
         <li>
          <code class="literal">0</code>: utilizza o genera un
          <span class="classname"><a href="class.throwable.php" class="classname">Throwable</a></span> come descritto sopra, ma genera
          solo un warning basato su quell'oggetto al posto di sollevarlo
          (compatibile con il comportamento di PHP 5)
         </li>
        </ul>
       </td>
      </tr>

     </tbody>
    
   </table>

  </div>

 </div>


 <div class="refsect1 parameters" id="refsect1-function.assert-parameters">
  <h3 class="title">Elenco dei parametri</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">assertion</code></dt>
     <dd>
      <p class="para">
       L&#039;asserzione. In PHP 5, questo deve essere o una <span class="type"><a href="language.types.string.php" class="type string">string</a></span> da
       essere valutata o un <span class="type"><a href="language.types.boolean.php" class="type boolean">boolean</a></span> da testare. In PHP 7, questo può
       anche essere qualsiasi espressione che restituisce un valore, che verrà eseguita e
       il risultato usato per indicare se l&#039;asserzione è riuscita o meno.
      </p>
     </dd>
    
    
     <dt><code class="parameter">description</code></dt>
     <dd>
      <p class="para">
       Una descrizione opzionale che sarà inclusa nel messaggio di fallimento se
       l&#039;<code class="parameter">assertion</code> fallisce.
      </p>
     </dd>
    
    
     <dt><code class="parameter">exception</code></dt>
     <dd>
      <p class="para">
       In PHP 7, il secondo parametro può essere un
       oggetto <span class="classname"><a href="class.throwable.php" class="classname">Throwable</a></span> al posto di una <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
       descrittiva, nel qual caso questo è l&#039;oggetto che sarà
       sollevato se l&#039;asserzione fallisce e la
       direttiva di configurazione
       <a href="info.configuration.php#ini.assert.exception" class="link">assert.exception</a> è abilitata.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.assert-returnvalues">
  <h3 class="title">Valori restituiti</h3>
  <p class="para">
   <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> se l&#039;asserzione è false, <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> in caso contrario.
  </p>
 </div>


 <div class="refsect1 changelog" id="refsect1-function.assert-changelog">
  <h3 class="title">Log delle modifiche</h3>
  <p class="para">
   <table class="doctable informaltable">
    
     <thead>
      <tr>
       <th>Versione</th>
       <th>Descrizione</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>7.0.0</td>
       <td>
        <span class="function"><strong>assert()</strong></span> è ora un costrutto del linguaggio e non una
        funzione. <span class="function"><strong>assertion()</strong></span> ora può essere usata come un&#039;espressione.
        Il secondo parametro è ora interpretato o come un
        <code class="parameter">exception</code> (se
        viene passato un oggetto<span class="classname"><a href="class.throwable.php" class="classname">Throwable</a></span>), o come la
        <code class="parameter">description</code> supportato da PHP 5.4.8 in poi.
       </td>
      </tr>

      <tr>
       <td>5.4.8</td>
       <td>
        È stato aggiunto il parametro <code class="parameter">description</code>. La
        <code class="parameter">description</code> è anche ora fornita ad una funzione
        di callback in modalità <strong><code><a href="info.constants.php#constant.assert-callback">ASSERT_CALLBACK</a></code></strong> come quarto
        parametro.
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.assert-examples">
  <h3 class="title">Esempi</h3>
  <div class="refsect2 unknown-37" id="refsect2-function.assert-unknown-37">
   <h4 class="title">Asserzioni tradizionali (PHP 5 e 7)</h4>
   <p class="para">
    <div class="example" id="example-1">
     <p><strong>Example #1 Gestione di un&#039;asserzione fallita con un handler personalizzato</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Attiva l'asserzione e la rende silenziosa<br /></span><span style="color: #0000BB">assert_options</span><span style="color: #007700">(</span><span style="color: #0000BB">ASSERT_ACTIVE</span><span style="color: #007700">, </span><span style="color: #0000BB">1</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">assert_options</span><span style="color: #007700">(</span><span style="color: #0000BB">ASSERT_WARNING</span><span style="color: #007700">, </span><span style="color: #0000BB">0</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">assert_options</span><span style="color: #007700">(</span><span style="color: #0000BB">ASSERT_QUIET_EVAL</span><span style="color: #007700">, </span><span style="color: #0000BB">1</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Crea una funzione handler<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">my_assert_handler</span><span style="color: #007700">(</span><span style="color: #0000BB">$file</span><span style="color: #007700">, </span><span style="color: #0000BB">$line</span><span style="color: #007700">, </span><span style="color: #0000BB">$code</span><span style="color: #007700">)<br />{<br />    echo </span><span style="color: #DD0000">"&lt;hr&gt;Assertion Failed:<br />        File '</span><span style="color: #0000BB">$file</span><span style="color: #DD0000">'&lt;br /&gt;<br />        Line '</span><span style="color: #0000BB">$line</span><span style="color: #DD0000">'&lt;br /&gt;<br />        Code '</span><span style="color: #0000BB">$code</span><span style="color: #DD0000">'&lt;br /&gt;&lt;hr /&gt;"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">// Imposta la callback<br /></span><span style="color: #0000BB">assert_options</span><span style="color: #007700">(</span><span style="color: #0000BB">ASSERT_CALLBACK</span><span style="color: #007700">, </span><span style="color: #DD0000">'my_assert_handler'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Fa un'asserzione che dovrebbe fallire<br /></span><span style="color: #0000BB">assert</span><span style="color: #007700">(</span><span style="color: #DD0000">'mysql_query("")'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    <div class="example" id="example-2">
     <p><strong>Example #2 Uso di un gestore personalizzato per stampare una descrizione</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Attiva l'asserzione e la rende silenziosa<br /></span><span style="color: #0000BB">assert_options</span><span style="color: #007700">(</span><span style="color: #0000BB">ASSERT_ACTIVE</span><span style="color: #007700">, </span><span style="color: #0000BB">1</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">assert_options</span><span style="color: #007700">(</span><span style="color: #0000BB">ASSERT_WARNING</span><span style="color: #007700">, </span><span style="color: #0000BB">0</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">assert_options</span><span style="color: #007700">(</span><span style="color: #0000BB">ASSERT_QUIET_EVAL</span><span style="color: #007700">, </span><span style="color: #0000BB">1</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Crea una funzione handler<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">my_assert_handler</span><span style="color: #007700">(</span><span style="color: #0000BB">$file</span><span style="color: #007700">, </span><span style="color: #0000BB">$line</span><span style="color: #007700">, </span><span style="color: #0000BB">$code</span><span style="color: #007700">, </span><span style="color: #0000BB">$desc </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />{<br />    echo </span><span style="color: #DD0000">"Assertion failed at </span><span style="color: #0000BB">$file</span><span style="color: #DD0000">:</span><span style="color: #0000BB">$line</span><span style="color: #DD0000">: </span><span style="color: #0000BB">$code</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br />    if (</span><span style="color: #0000BB">$desc</span><span style="color: #007700">) {<br />        echo </span><span style="color: #DD0000">": </span><span style="color: #0000BB">$desc</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br />    }<br />    echo </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">// Imposta la callback<br /></span><span style="color: #0000BB">assert_options</span><span style="color: #007700">(</span><span style="color: #0000BB">ASSERT_CALLBACK</span><span style="color: #007700">, </span><span style="color: #DD0000">'my_assert_handler'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Fa un'asserzione che dovrebbe fallire<br /></span><span style="color: #0000BB">assert</span><span style="color: #007700">(</span><span style="color: #DD0000">'2 &lt; 1'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">assert</span><span style="color: #007700">(</span><span style="color: #DD0000">'2 &lt; 1'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Two is less than one'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <div class="example-contents"><p>Il precedente esempio visualizzerà:</p></div>
     <div class="example-contents screen">
 <div class="cdata"><pre>
 Assertion failed at test.php:21: 2 &lt; 1
 Assertion failed at test.php:22: 2 &lt; 1: Two is less than one
 </pre></div>
     </div>
    </div>
   </p>
  </div>

  <div class="refsect2 unknown-40" id="refsect2-function.assert-unknown-40">
   <h4 class="title">Aspettative (solo PHP 7)</h4>
   <div class="example" id="example-3">
    <p><strong>Example #3 Aspettative senza un&#039;eccezione personalizzata</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />assert</span><span style="color: #007700">(</span><span style="color: #0000BB">true </span><span style="color: #007700">== </span><span style="color: #0000BB">false</span><span style="color: #007700">);<br />echo </span><span style="color: #DD0000">'Hi!'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>
     Con <a href="ini.core.php#ini.zend.assertions" class="link">zend.assertions</a> impostato a 0,
     l&#039;esempio di sopra stamperà:
    </p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
Hi!
</pre></div>
    </div>
    <div class="example-contents"><p>
     Con <a href="ini.core.php#ini.zend.assertions" class="link">zend.assertions</a> impostato a 1
     e <a href="info.configuration.php#ini.assert.exception" class="link">assert.exception</a> impostato a 0,
     l&#039;esempio di sopra stamperà:
    </p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
Warning: assert(): assert(true == false) failed in - on line 2
Hi!
</pre></div>
    </div>
    <div class="example-contents"><p>
     Con <a href="ini.core.php#ini.zend.assertions" class="link">zend.assertions</a> impostato a 1
     e <a href="info.configuration.php#ini.assert.exception" class="link">assert.exception</a> impostato a 1,
     l&#039;esempio di sopra stamperà:
    </p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
Fatal error: Uncaught AssertionError: assert(true == false) in -:2
Stack trace:
#0 -(2): assert(false, &#039;assert(true == ...&#039;)
#1 {main}
  thrown in - on line 2
</pre></div>
    </div>
   </div>
   <div class="example" id="example-4">
    <p><strong>Example #4 Aspettative con un&#039;eccezione personalizzata</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">CustomError </span><span style="color: #007700">extends </span><span style="color: #0000BB">AssertionError </span><span style="color: #007700">{}<br /><br /></span><span style="color: #0000BB">assert</span><span style="color: #007700">(</span><span style="color: #0000BB">true </span><span style="color: #007700">== </span><span style="color: #0000BB">false</span><span style="color: #007700">, new </span><span style="color: #0000BB">CustomError</span><span style="color: #007700">(</span><span style="color: #DD0000">'True is not false!'</span><span style="color: #007700">));<br />echo </span><span style="color: #DD0000">'Hi!'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>
     Con <a href="ini.core.php#ini.zend.assertions" class="link">zend.assertions</a> impostato a 0,
     l&#039;esempio di sopra stamperà:
    </p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
Hi!
</pre></div>
    </div>
    <div class="example-contents"><p>
     Con <a href="ini.core.php#ini.zend.assertions" class="link">zend.assertions</a> impostato a 1
     e <a href="info.configuration.php#ini.assert.exception" class="link">assert.exception</a> impostato a 0,
     l&#039;esempio di sopra stamperà:
    </p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
Warning: assert(): CustomError: True is not false! in -:4
Stack trace:
#0 {main} failed in - on line 4
Hi!
</pre></div>
    </div>
    <div class="example-contents"><p>
     Con <a href="ini.core.php#ini.zend.assertions" class="link">zend.assertions</a> impostato a 1
     e <a href="info.configuration.php#ini.assert.exception" class="link">assert.exception</a> impostato a 1,
     l&#039;esempio di sopra stamperà:
    </p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
Fatal error: Uncaught CustomError: True is not false! in -:4
Stack trace:
#0 {main}
  thrown in - on line 4
</pre></div>
    </div>
   </div>
  </div>

 </div>


 <div class="refsect1 seealso" id="refsect1-function.assert-seealso">
  <h3 class="title">Vedere anche:</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.assert-options.php" class="function" rel="rdfs-seeAlso">assert_options()</a> - Imposta/ottiene vari parametri per assert</span></li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>