1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-23 23:12:09 +01:00
Files
archived-doc-es/language/oop5/final.xml
Louis-Arnaud d20fadcbae Update outdated EN-Revision hashes in language/ (#348)
Sync 40 Spanish translation files with latest English source changes:
- context/, wrappers/: bump hashes (role attributes already applied)
- control-structures/: indentation and typo fixes
- oop5/final: indentation restructure, split note blocks
- oop5/property-hooks: add missing property declaration in example
- oop5/visibility: add PHP 8.5 asymmetric visibility for static properties
- operators/precedence: add pipe operator and throw rows
- predefined/attributes: add TARGET_CONSTANT for PHP 8.5
- predefined/closure: add getcurrent entity reference
- predefined/*: bump hashes (phpdoc entity changes already applied)
2026-02-27 16:50:35 +01:00

134 lines
3.2 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 907f8ab64150c8503cb9f33d274ab6a7211b86a3 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: no -->
<sect1 xml:id="language.oop5.final" xmlns="http://docbook.org/ns/docbook">
<title>Palabra clave "final"</title>
<para>
La palabra clave <literal>final</literal> impide que las clases hijas redefinan
un método, una propiedad o constante prefijando la definición con
<literal>final</literal>. Si la clase misma es
definida como final, no podrá ser extendida.
</para>
<para>
<example>
<title>Ejemplo de método final</title>
<programlisting role="php">
<![CDATA[
<?php
class BaseClass {
public function test() {
echo "BaseClass::test() llamada\n";
}
final public function moreTesting() {
echo "BaseClass::moreTesting() llamada\n";
}
}
class ChildClass extends BaseClass {
public function moreTesting() {
echo "ChildClass::moreTesting() llamada\n";
}
}
// Resultado: Fatal error: Cannot override final method BaseClass::moreTesting()
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Ejemplo de clase final</title>
<programlisting role="php">
<![CDATA[
<?php
final class BaseClass {
public function test() {
echo "BaseClass::test() llamada\n";
}
// Como la clase ya es final, la palabra clave final es redundante
final public function moreTesting() {
echo "BaseClass::moreTesting() llamada\n";
}
}
class ChildClass extends BaseClass {
}
// Resultado: Fatal error: Class ChildClass may not inherit from final class (BaseClass)
?>
]]>
</programlisting>
</example>
</para>
<example>
<title>Ejemplo de propiedad final a partir de PHP 8.4.0</title>
<programlisting role="php">
<![CDATA[
<?php
class BaseClass {
final protected string $test;
}
class ChildClass extends BaseClass {
public string $test;
}
// Resultado: Error fatal: Imposible redefinir la propiedad final BaseClass::$test
?>
]]>
</programlisting>
</example>
<example xml:id="language.oop5.final.example.php81">
<title>Ejemplo de constantes finales a partir de PHP 8.1.0</title>
<programlisting role="php">
<![CDATA[
<?php
class Foo
{
final public const X = "foo";
}
class Bar extends Foo
{
public const X = "bar";
}
// Fatal error: Bar::X cannot override final constant Foo::X
?>
]]>
</programlisting>
</example>
<note>
<simpara>
A partir de PHP 8.0.0, los métodos privados no pueden ser declarados finales, con la excepción del <link linkend="language.oop5.decon.constructor">constructor</link>.
</simpara>
</note>
<note>
<simpara>
Una propiedad declarada <link linkend="language.oop5.visibility-members-aviz"><literal>private(set)</literal></link> es
implícitamente <literal>final</literal>.
</simpara>
</note>
</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
-->