<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.oop5.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'language.oop5.paamayim-nekudotayim.php',
    1 => 'El operador de resoluci&oacute;n de &aacute;mbito (::)',
    2 => 'El operador de resoluci&oacute;n de &aacute;mbito (::)',
  ),
  'up' => 
  array (
    0 => 'language.oop5.php',
    1 => 'Clases y objetos',
  ),
  'prev' => 
  array (
    0 => 'language.oop5.inheritance.php',
    1 => 'Herencia',
  ),
  'next' => 
  array (
    0 => 'language.oop5.static.php',
    1 => 'Est&aacute;tico',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'language/oop5/paamayim-nekudotayim.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.oop5.paamayim-nekudotayim" class="sect1">
 <h2 class="title">El operador de resolución de ámbito (::)</h2>

 <p class="para">
  El operador de resolución de ámbito (también llamado Paamayim Nekudotayim) o,
  en términos más simples, el símbolo &quot;doble dos puntos&quot; (::),
  proporciona un medio para acceder a los miembros
  una <a href="language.oop5.constants.php" class="link">constante</a>,
  una propiedad <a href="language.oop5.static.php" class="link">estática</a>,
  o un método <a href="language.oop5.static.php" class="link">estático</a>
  de una clase o de una de sus clases padre.
  Además, las propiedades o métodos estáticos pueden ser sobrecargados vía
  la <a href="language.oop5.late-static-bindings.php" class="link">ligadura estática tardía</a>.

 </p>

 <p class="para">
  Cuando se hace referencia a estos elementos fuera de la definición de
  la clase, se utiliza el nombre de la clase.
 </p>

 <p class="para">
  Es posible referenciar una clase utilizando
  una variable. El valor de la variable no puede ser una palabra clave (e.g. <code class="literal">self</code>,
  <code class="literal">parent</code> y <code class="literal">static</code>).
 </p>

 <p class="para">
  Paamayim Nekudotayim podría parecer al principio una elección extraña
  para nombrar un doble dos puntos.
  Sin embargo, en el momento de la escritura del Zend Engine 0.5
  (que hacía funcionar PHP 3), fue el nombre elegido por el equipo Zend.
  De hecho, esto significa un doble dos puntos... ¡en hebreo!
 </p>

 <div class="example" id="example-1">
  <p><strong>Ejemplo #1 :: fuera de la definición de la clase</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">MyClass </span><span style="color: #007700">{<br />    const </span><span style="color: #0000BB">CONST_VALUE </span><span style="color: #007700">= </span><span style="color: #DD0000">'Un valor constante'</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$classname </span><span style="color: #007700">= </span><span style="color: #DD0000">'MyClass'</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">$classname</span><span style="color: #007700">::</span><span style="color: #0000BB">CONST_VALUE</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">::</span><span style="color: #0000BB">CONST_VALUE</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
  </div>

 </div>

 <p class="para">
  Tres palabras clave especiales, <var class="varname">self</var>, <var class="varname">parent</var>,
  y <var class="varname">static</var> son utilizadas para acceder a las propiedades o a
  los métodos desde la definición de la clase.
 </p>

 <div class="example" id="example-2">
  <p><strong>Ejemplo #2 :: desde la definición de la clase</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">MyClass </span><span style="color: #007700">{<br />    const </span><span style="color: #0000BB">CONST_VALUE </span><span style="color: #007700">= </span><span style="color: #DD0000">'Un valor constante'</span><span style="color: #007700">;<br />}<br /><br />class </span><span style="color: #0000BB">OtherClass </span><span style="color: #007700">extends </span><span style="color: #0000BB">MyClass<br /></span><span style="color: #007700">{<br />    public static </span><span style="color: #0000BB">$my_static </span><span style="color: #007700">= </span><span style="color: #DD0000">'variable estática'</span><span style="color: #007700">;<br /><br />    public static function </span><span style="color: #0000BB">doubleColon</span><span style="color: #007700">() {<br />        echo </span><span style="color: #0000BB">parent</span><span style="color: #007700">::</span><span style="color: #0000BB">CONST_VALUE </span><span style="color: #007700">. </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />        echo </span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">$my_static </span><span style="color: #007700">. </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$classname </span><span style="color: #007700">= </span><span style="color: #DD0000">'OtherClass'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$classname</span><span style="color: #007700">::</span><span style="color: #0000BB">doubleColon</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">OtherClass</span><span style="color: #007700">::</span><span style="color: #0000BB">doubleColon</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
  </div>

 </div>

 <p class="para">
  Cuando una clase que hereda de otra redefine un método de su clase padre,
  PHP no llamará al método de la clase padre. Es responsabilidad del método derivado
  llamar al método original en caso de necesidad. Esto también es válido
  para las definiciones de los <a href="language.oop5.decon.php" class="link">constructores y destructores</a>,
  la <a href="language.oop5.overloading.php" class="link">sobrecarga</a>, y las
  definiciones de <a href="language.oop5.magic.php" class="link">métodos mágicos</a>.
 </p>

 <div class="example" id="example-3">
  <p><strong>Ejemplo #3 Llamada a un método padre</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">MyClass<br /></span><span style="color: #007700">{<br />    protected function </span><span style="color: #0000BB">myFunc</span><span style="color: #007700">() {<br />        echo </span><span style="color: #DD0000">"MyClass::myFunc()\n"</span><span style="color: #007700">;<br />  }<br />}<br /><br />class </span><span style="color: #0000BB">OtherClass </span><span style="color: #007700">extends </span><span style="color: #0000BB">MyClass<br /></span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">// Sobrecarga de la definición padre<br />    </span><span style="color: #007700">public function </span><span style="color: #0000BB">myFunc</span><span style="color: #007700">() {<br /><br />      </span><span style="color: #FF8000">// Pero llamada al método padre<br />      </span><span style="color: #0000BB">parent</span><span style="color: #007700">::</span><span style="color: #0000BB">myFunc</span><span style="color: #007700">();<br />      echo </span><span style="color: #DD0000">"OtherClass::myFunc()\n"</span><span style="color: #007700">;<br />  }<br />}<br /><br /></span><span style="color: #0000BB">$class </span><span style="color: #007700">= new </span><span style="color: #0000BB">OtherClass</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$class</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">myFunc</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
  </div>

 </div>
  <p class="para">
   Ver también <a href="language.oop5.basic.php#language.oop5.basic.class.this" class="link">algunos
   ejemplos de llamadas estáticas</a>.
  </p>

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