<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/reserved.attributes.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'class.nodiscard.php',
    1 => 'NoDiscard',
    2 => 'El atributo NoDiscard',
  ),
  'up' => 
  array (
    0 => 'reserved.attributes.php',
    1 => 'Atributos predefinidos',
  ),
  'prev' => 
  array (
    0 => 'deprecated.construct.php',
    1 => 'Deprecated::__construct',
  ),
  'next' => 
  array (
    0 => 'nodiscard.construct.php',
    1 => 'NoDiscard::__construct',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'language/predefined/attributes/nodiscard.xml',
  ),
  'history' => 
  array (
  ),
  'extra_header_links' => 
  array (
    'rel' => 'alternate',
    'href' => '/manual/en/feeds/class.nodiscard.atom',
    'type' => 'application/atom+xml',
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="class.nodiscard" class="reference">
 <h1 class="title">El atributo NoDiscard</h1>
 

 <div class="partintro"><p class="verinfo">(PHP 8 &gt;= 8.5.0)</p>

  <div class="section" id="nodiscard.intro">
   <h2 class="title">Introducción</h2>
   <p class="simpara">
    Este atributo se puede utilizar para indicar que el valor de retorno de una función
    o de un método no debe ser descartado. Si el valor de retorno no se utiliza de
    ninguna manera, se emitirá una advertencia.
   </p>
   <p class="simpara">
    Esto es útil para funciones en las que no comprobar el valor de retorno es
    probablemente un error.
   </p>
   <p class="simpara">
    Para descartar intencionalmente el valor de retorno de dicha función, utilice
    la conversión (void) para suprimir la advertencia.
   </p>
   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <span class="simpara">
     Dado que los atributos están diseñados para ser retrocompatibles,
     <code class="code">#[\NoDiscard]</code> se puede añadir a funciones y métodos
     incluso cuando se soportan PHP 8.4 o versiones anteriores, simplemente no hará nada.
     En PHP 8.5 y superiores se emitirá una advertencia si el resultado no se utiliza.
     Para suprimir la advertencia sin usar <code class="code">(void)</code>,
     que no es soportado antes de PHP 8.5,
     considere usar una variable como <code class="code">$_</code>.
    </span>
   </p></blockquote>
   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <span class="simpara">
     <code class="code">#[\NoDiscard]</code> se aplica a la declaración de función o método
     específica sobre la que está escrito, y la advertencia se emite en función
     de la declaración que realmente se llama. Como resultado, añadir
     <code class="code">#[\NoDiscard]</code> a un método de interfaz o a un método abstracto
     no emite ninguna advertencia, porque el método que se invoca es el método
     de implementación o de sobrescritura. Del mismo modo, un método que
     sobrescribe un método <code class="code">#[\NoDiscard]</code> no emite la advertencia a
     menos que esté marcado él mismo con el atributo. Por el contrario, un
     método importado desde un trait conserva el atributo, porque el método del
     trait se copia en la clase que lo usa como si estuviera declarado allí.
    </span>
   </p></blockquote>
  </div>

  <div class="section" id="nodiscard.synopsis">
   <h2 class="title">Sinopsis de la Clase</h2>

   <div class="classsynopsis"><div class="classsynopsisinfo">
    
     <span class="attribute"><a href="class.attribute.php">#[\Attribute]</a> </span><br>
     <span class="modifier">final</span>
     <span class="modifier">class</span> <strong class="classname"><strong class="classname">NoDiscard</strong></strong>
     {</div>

    <div class="classsynopsisinfo classsynopsisinfo_comment">/* Propiedades */</div>
    <div class="fieldsynopsis">
     <span class="modifier">public</span>
     <span class="modifier">readonly</span>
     <span class="type">?</span><span class="type"><span class="type"><a href="language.types.string.php" class="type string">string</a></span><span class="type"></span></span>
      <var class="varname"><a href="class.nodiscard.php#nodiscard.props.message">$<var class="varname">message</var></a></var>;</div>


    <div class="classsynopsisinfo classsynopsisinfo_comment">/* Métodos */</div>
    <div class="constructorsynopsis dc-description">
   <span class="modifier">public</span> <span class="modifier">function</span> <span class="methodname"><a href="nodiscard.construct.php" class="methodname">__construct</a></span>(<span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.string.php" class="type string">string</a></span></span> <code class="parameter">$message</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong></span></span>)</div>

   }</div>

  </div>

  <div class="section" id="nodiscard.props">
   <h2 class="title">Propiedades</h2>
   <dl>
    
     <dt id="nodiscard.props.message"><var class="varname">message</var></dt>
     <dd>
      <span class="simpara">
       Un mensaje opcional que explica por qué el valor de retorno no debe ser descartado.
      </span>
     </dd>
    
   </dl>
  </div>

  <div class="section">
   <h2 class="title">Ejemplos</h2>
   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 Uso básico</strong></p>
    <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php

</span><span style="color: #FF8000">/**
 * Processes all the given items and returns an array with the results of the
 * operation for each item. `null` indicates success and an Exception indicates
 * an error. The keys of the result array match the keys of the $items array.
 *
 * @param array&lt;string&gt; $items
 * @return array&lt;null|Exception&gt;
 */
</span><span style="color: #007700">#[</span><span style="color: #0000BB">\NoDiscard</span><span style="color: #007700">(</span><span style="color: #DD0000">"as processing might fail for individual items"</span><span style="color: #007700">)]
function </span><span style="color: #0000BB">bulk_process</span><span style="color: #007700">(array </span><span style="color: #0000BB">$items</span><span style="color: #007700">): array {
    </span><span style="color: #0000BB">$results </span><span style="color: #007700">= [];

    foreach (</span><span style="color: #0000BB">$items </span><span style="color: #007700">as </span><span style="color: #0000BB">$key </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$item</span><span style="color: #007700">) {
        if (</span><span style="color: #0000BB">\random_int</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">9999</span><span style="color: #007700">) &lt; </span><span style="color: #0000BB">9999</span><span style="color: #007700">) {
            </span><span style="color: #FF8000">// Pretend to do something useful with $item,
            // which will succeed in 99.99% of cases.
            </span><span style="color: #007700">echo </span><span style="color: #DD0000">"Processing </span><span style="color: #007700">{</span><span style="color: #0000BB">$item</span><span style="color: #007700">}</span><span style="color: #DD0000">"</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;
            </span><span style="color: #0000BB">$error </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">;
        } else {
            </span><span style="color: #0000BB">$error </span><span style="color: #007700">= new </span><span style="color: #0000BB">\Exception</span><span style="color: #007700">(</span><span style="color: #DD0000">"Failed to process </span><span style="color: #007700">{</span><span style="color: #0000BB">$item</span><span style="color: #007700">}</span><span style="color: #DD0000">."</span><span style="color: #007700">);
        }

        </span><span style="color: #0000BB">$results</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">] = </span><span style="color: #0000BB">$error</span><span style="color: #007700">;
    }

    return </span><span style="color: #0000BB">$results</span><span style="color: #007700">;
}

</span><span style="color: #0000BB">bulk_process</span><span style="color: #007700">(</span><span style="color: #0000BB">$items</span><span style="color: #007700">);

</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
    </div>

    <div class="example-contents"><p>La salida del ejemplo anterior en PHP 8.5 es similar a:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
Warning: The return value of function bulk_process() should either be used or intentionally ignored by casting it as (void), as processing might fail for individual items
</pre></div>
    </div>
   </div>
   <div class="example" id="example-2">
    <p><strong>Ejemplo #2 Descartar intencionalmente el valor de retorno</strong></p>
    <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php

</span><span style="color: #007700">#[</span><span style="color: #0000BB">\NoDiscard</span><span style="color: #007700">]
function </span><span style="color: #0000BB">some_command</span><span style="color: #007700">(): </span><span style="color: #0000BB">int </span><span style="color: #007700">{
    return </span><span style="color: #0000BB">1</span><span style="color: #007700">;
}

</span><span style="color: #FF8000">// Suprimir la advertencia usando (void) - PHP 8.5+
</span><span style="color: #007700">(</span><span style="color: #0000BB">void</span><span style="color: #007700">) </span><span style="color: #0000BB">some_command</span><span style="color: #007700">();

</span><span style="color: #FF8000">// Para compatibilidad con versiones de PHP anteriores a 8.5, usar una variable temporal
</span><span style="color: #0000BB">$_ </span><span style="color: #007700">= </span><span style="color: #0000BB">some_command</span><span style="color: #007700">();

</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
    </div>

   </div>
  </div>

  <div class="section" id="nodiscard.seealso">
   <h2 class="title">Ver también</h2>
   <ul class="simplelist">
    <li><a href="language.attributes.php" class="link">Visión general de los atributos</a></li>
   </ul>
  </div>

 </div>

 






<h2>Tabla de contenidos</h2><ul class="chunklist chunklist_reference"><li><a href="nodiscard.construct.php">NoDiscard::__construct</a> — Construye una nueva instancia del atributo NoDiscard</li></ul>
</div>
<?php manual_footer($setup); ?>