1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-25 16:02:13 +01:00
Files
archived-doc-es/language/oop5/static.xml
Pedro Antonio Gil Rodríguez 423bc7ebca Correcciones menores de otros usuarios
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@338437 c90b9560-bf6c-de11-be94-00142212c4b1
2016-01-08 09:12:10 +00:00

162 lines
4.6 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 7e52ec86851a62d1d00109ccffa5dab5c73e5cc2 Maintainer: seros Status: ready -->
<!-- Reviewed: no Maintainer: seros -->
<sect1 xml:id="language.oop5.static" xmlns="http://docbook.org/ns/docbook">
<title>La palabra reservada 'static'</title>
<tip>
<simpara>
Esta página describe el uso de la palabra reservada <literal>static</literal> para
definir métodos y propiedades estáticos. <literal>static</literal> también se
puede usar para
<link linkend="language.variables.scope.static">definir variables estáticas</link>
y para
<link linkend="language.oop5.late-static-bindings">enlaces estáticos en tiempo de ejecución</link>.
Por favor, consulte estas páginas para más información sobre estos significados de
<literal>static</literal>.
</simpara>
</tip>
<para>
Declarar propiedades o métodos de clases como estáticos los hacen accesibles
sin la necesidad de instanciar la clase. Una propiedad declarada como
static no puede ser accedida con un objeto de clase instanciado (aunque
un método estático sí lo puede hacer).
</para>
<para>
Por motivos de compatibilidad con PHP 4, si no se utiliza ninguna
declaración de <link linkend="language.oop5.visibility">visibilidad</link>,
se tratará a las propiedades o métodos como si hubiesen sido definidos como
<literal>public</literal>.
</para>
<sect2 xml:id="language.oop5.static.methods">
<title>Métodos estáticos</title>
<para>
Debido a que los métodos estáticos se pueden invocar sin tener creada
una instancia del objeto, la seudovariable <varname>$this</varname>
no está disponible dentro de los métodos declarados como estáticos.
</para>
<caution>
<simpara>
En PHP 5, llamar a métodos no estáticos de forma estática genera una
advertencia de nivel <constant>E_STRICT</constant>.
</simpara>
</caution>
<warning>
<simpara>
En PHP 7, llamar a métodos no estáticos de forma estática está obsoleto y
generará una advertencia <constant>E_DEPRECATED</constant>. El soporte para
las llamadas a métodos no estáticos de forma estática podría ser eliminado en el futuro.
</simpara>
</warning>
<example>
<title>Ejemplo de método estático</title>
<programlisting role="php">
<![CDATA[
<?php
class Foo {
public static function unMétodoEstático() {
// ...
}
}
Foo::unMétodoEstático();
$nobmre_clase = 'Foo';
$nobmre_clase::unMétodoEstático(); // A partir de PHP 5.3.0
?>
]]>
</programlisting>
</example>
</sect2>
<sect2 xml:id="language.oop5.static.properties">
<title>Propiedades estáticas</title>
<para>
A las propiedades estáticas no puede acceder a través del objeto utilizando el
operador flecha (-&gt;).
</para>
<para>
Como cualquier otra variable estática de PHP, las propiedades estáticas
sólo pueden ser inicializadas utilizando un string literal o una constante;
las expresiones no están permitidas. Por tanto, se puede inicializar una propiedad
estática con enteros o arrays (por ejemplo), pero no se puede hacer con
otra variable, con el valor de devolución de una función, o con un objeto.
</para>
<para>
A partir de PHP 5.3.0, es posible hacer referencia a una clase usando una
variable. El valor de la variable no puede ser una palabra reservada (p.ej.,
<literal>self</literal>, <literal>parent</literal> y <literal>static</literal>).
</para>
<example>
<title>Ejemplo de propiedad estática</title>
<programlisting role="php">
<![CDATA[
<?php
class Foo
{
public static $mi_static = 'foo';
public function valorStatic() {
return self::$mi_static;
}
}
class Bar extends Foo
{
public function fooStatic() {
return parent::$mi_static;
}
}
print Foo::$mi_static . "\n";
$foo = new Foo();
print $foo->valorStatic() . "\n";
print $foo->mi_static . "\n"; // "Propiedad" mi_static no definida
print $foo::$mi_static . "\n";
$nombreClase = 'Foo';
print $nombreClase::$mi_static . "\n"; // A partir de PHP 5.3.0
print Bar::$mi_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>
]]>
</programlisting>
</example>
</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
-->