<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.types.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'language.types.type-system.php',
    1 => 'Sistema de tipos',
    2 => 'Sistema de tipos',
  ),
  'up' => 
  array (
    0 => 'language.types.php',
    1 => 'Los tipos',
  ),
  'prev' => 
  array (
    0 => 'language.types.intro.php',
    1 => 'Introducci&oacute;n',
  ),
  'next' => 
  array (
    0 => 'language.types.null.php',
    1 => 'NULL',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'language/types/type-system.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.types.type-system" class="sect1">
 <h2 class="title">Sistema de tipos</h2>

 <p class="para">
  PHP utiliza un sistema de tipos nominal con una fuerte relación de subtipado comportamental.
  La relación de subtipado se verifica en la compilación, mientras que la verificación de tipos
  se verifica dinámicamente en el momento de la ejecución.
 </p>

 <p class="para">
  El sistema de tipos de PHP soporta varios tipos atómicos que pueden ser compuestos juntos
  para crear tipos más complejos. Algunos de estos tipos pueden ser escritos en forma de
  <a href="language.types.declarations.php" class="link">declaración de tipo</a>.
 </p>

 <div class="sect2" id="language.types.type-system.atomic">
  <h3 class="title">Tipos atómicos</h3>
  <p class="para">
   Algunos tipos atómicos son tipos que están estrechamente integrados en el lenguaje
   y no pueden ser reproducidos con tipos definidos por el usuario.
  </p>

  <p class="para">
   La lista de tipos básicos es la siguiente:
   <ul class="itemizedlist">
    <li class="listitem">
     <span class="simpara">Tipos integrados</span>
     <ul class="itemizedlist">
      <li class="listitem">
       <span class="simpara">
        Tipos escalares:
       </span>
       <ul class="itemizedlist">
        <li class="listitem">
         <span class="simpara">tipo <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></span>
        </li>
        <li class="listitem">
         <span class="simpara">tipo <span class="type"><a href="language.types.integer.php" class="type int">int</a></span></span>
        </li>
        <li class="listitem">
         <span class="simpara">tipo <span class="type"><a href="language.types.float.php" class="type float">float</a></span></span>
        </li>
        <li class="listitem">
         <span class="simpara">tipo <span class="type"><a href="language.types.string.php" class="type string">string</a></span></span>
        </li>
       </ul>
      </li>
      <li class="listitem">
       <span class="simpara">tipo <span class="type"><a href="language.types.array.php" class="type array">array</a></span></span>
      </li>
      <li class="listitem">
       <span class="simpara">tipo <span class="type"><a href="language.types.object.php" class="type object">object</a></span></span>
      </li>
      <li class="listitem">
       <span class="simpara">tipo <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span></span>
      </li>
      <li class="listitem">
       <span class="simpara">tipo <span class="type"><a href="language.types.never.php" class="type never">never</a></span></span>
      </li>
      <li class="listitem">
       <span class="simpara">tipo <span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span></span>
      </li>
      <li class="listitem">
       <span class="simpara">
       <a href="language.types.relative-class-types.php" class="link">Tipos de clases relativas</a>:
       <span class="type">self</span>, <span class="type">parent</span>, y <span class="type">static</span>
       </span>
      </li>
      <li class="listitem">
       <span class="simpara">
        <a href="language.types.singleton.php" class="link">Tipos singleton</a>
       </span>
       <ul class="itemizedlist">
        <li class="listitem">
         <span class="simpara"><span class="type"><a href="language.types.singleton.php" class="type false">false</a></span></span>
        </li>
        <li class="listitem">
         <span class="simpara"><span class="type"><a href="language.types.singleton.php" class="type true">true</a></span></span>
        </li>
       </ul>
      </li>
      <li class="listitem">
       <span class="simpara">
        Tipos unitarios
       </span>
       <ul class="itemizedlist">
        <li class="listitem">
         <span class="simpara"><span class="type"><a href="language.types.null.php" class="type null">null</a></span></span>
        </li>
       </ul>
      </li>
     </ul>
    </li>
    <li class="listitem">
     <span class="simpara">
      Tipos definidos por el usuario (generalmente llamados clases-tipos)
     </span>
     <ul class="itemizedlist">
      <li class="listitem">
       <span class="simpara"><a href="language.oop5.interfaces.php" class="link">Interfaces</a></span>
      </li>
      <li class="listitem">
       <span class="simpara"><a href="language.oop5.basic.php#language.oop5.basic.class" class="link">Clases</a></span>
      </li>
      <li class="listitem">
       <span class="simpara"><a href="language.types.enumerations.php" class="link">Enumeraciones</a></span>
      </li>
     </ul>
    </li>
    <li class="listitem">
     <span class="simpara">tipo <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span></span>
    </li>
   </ul>
  </p>

  <div class="sect3" id="language.types.type-system.atomic.scalar">
   <h4 class="title">Tipos escalares</h4>
   <p class="simpara">
    Un valor se considera escalar si es de tipo <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>,
    <span class="type"><a href="language.types.float.php" class="type float">float</a></span>, <span class="type"><a href="language.types.string.php" class="type string">string</a></span> o <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>.
   </p>
  </div>

  <div class="sect3" id="language.types.type-system.atomic.user-defined">
   <h4 class="title">Tipos definidos por el usuario</h4>
   <p class="simpara">
    Es posible definir tipos personalizados con
    <a href="language.oop5.interfaces.php" class="link">interfaces</a>,
    <a href="language.oop5.basic.php#language.oop5.basic.class" class="link">clases</a> y
    <a href="language.types.enumerations.php" class="link">enumeraciones</a>.
    Estos se consideran tipos definidos por el usuario, o tipos de clase.
    Por ejemplo, una clase llamada <code class="literal">Elephant</code> puede ser definida,
    luego objetos de tipo <code class="literal">Elephant</code> pueden ser instanciados,
    y una función puede requerir un argumento de tipo <code class="literal">Elephant</code>.
    </p>
   </div>
  </div>

  <div class="sect2" id="language.types.type-system.composite">
   <h3 class="title">Tipos compuestos</h3>
   <p class="para">
    Es posible combinar varios tipos atómicos en tipos compuestos.
    PHP permite combinar los tipos de la siguiente manera:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     Intersección de clases-tipos (interfaces y nombres de clases).
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Unión de tipos.
    </span>
   </li>
  </ul>

  <div class="sect3" id="language.types.type-system.composite.intersection">
   <h4 class="title">Intersección de tipos</h4>
   <p class="para">
    Un tipo de intersección acepta valores que satisfacen varias
    declaraciones de tipo de clase, en lugar de una sola.
    Los tipos individuales que forman el tipo de intersección están unidos por el símbolo
    <code class="literal">&amp;</code>. Por lo tanto, un tipo de intersección compuesto
    por los tipos <code class="literal">T</code>, <code class="literal">U</code> y
    <code class="literal">V</code> se escribe <code class="literal">T&amp;U&amp;V</code>.
   </p>
  </div>

  <div class="sect3" id="language.types.type-system.composite.union">
   <h4 class="title">Tipos de unión</h4>
   <p class="para">
    Un tipo de unión acepta valores de varios tipos diferentes,
    en lugar de uno solo.
    Los tipos individuales que forman el tipo de unión están unidos por el símbolo
    <code class="literal">|</code>. Por lo tanto, un tipo de unión compuesto
    por los tipos <code class="literal">T</code>, <code class="literal">U</code> y
    <code class="literal">V</code> se escribe <code class="literal">T|U|V</code>.
    Si uno de los tipos es un tipo de intersección, debe ser puesto entre
    paréntesis para ser escrito en <abbr title="Disjunctive Normal Form">DNF</abbr>.
    <code class="literal">T|(X&amp;Y)</code>.
   </p>
  </div>
 </div>

 <div class="sect2" id="language.types.type-system.alias">
  <h3 class="title">Alias de tipo</h3>

  <p class="para">
   PHP soporta dos alias de tipo: <span class="type"><a href="language.types.mixed.php" class="type mixed">mixed</a></span> y
   <span class="type"><a href="language.types.iterable.php" class="type iterable">iterable</a></span> que corresponde al tipo
   <a href="language.types.type-system.php#language.types.type-system.composite.union" class="link">tipo de unión</a>
   de <code class="literal">object|resource|array|string|float|int|bool|null</code>
   y <code class="literal">Traversable|array</code> respectivamente.
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    PHP no soporta alias de tipo definidos por el usuario.
   </span>
  </p></blockquote>
 </div>

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