1
1
<?xml version =" 1.0" encoding =" utf-8" ?>
2
- <!-- EN-Revision: 5e8652131e898cd3d02cd26eeb26da718a6aaf65 Maintainer: chuso Status: ready -->
2
+ <!-- EN-Revision: 907f8ab64150c8503cb9f33d274ab6a7211b86a3 Maintainer: Marqitos -->
3
3
<!-- Reviewed: no Maintainer: andresdzphp -->
4
4
<sect1 xml : id =" language.oop5.final" xmlns =" http://docbook.org/ns/docbook" >
5
5
<title >Palabra clave Final</title >
16
16
<?php
17
17
class BaseClass {
18
18
public function test() {
19
- echo "llamada a BaseClass::test()\n";
19
+ echo "Llamada a BaseClass::test()\n";
20
20
}
21
21
22
22
final public function moreTesting() {
23
- echo "llamada a BaseClass::moreTesting()\n";
23
+ echo "Llamada a BaseClass::moreTesting()\n";
24
24
}
25
25
}
26
26
27
27
class ChildClass extends BaseClass {
28
28
public function moreTesting() {
29
- echo "llamada a ChildClass::moreTesting()\n";
29
+ echo "Llamada a ChildClass::moreTesting()\n";
30
30
}
31
31
}
32
32
// Devuelve un error Fatal: Cannot override final method BaseClass::moreTesting()
@@ -37,33 +37,49 @@ class ChildClass extends BaseClass {
37
37
</para >
38
38
<para >
39
39
<example >
40
- <title >Ejemplo de clase Final </title >
40
+ <title >Ejemplo de clase final </title >
41
41
<programlisting role =" php" >
42
42
<![CDATA[
43
43
<?php
44
44
final class BaseClass {
45
45
public function test() {
46
- echo "llamada a BaseClass::test()\n";
46
+ echo "BaseClass::test() llamada \n";
47
47
}
48
48
49
- // Aquí no importa si definimos una función como final o no
49
+ // Como la clase es final, la palabra clave final para el método, es redundante
50
50
final public function moreTesting() {
51
- echo "llamada a BaseClass::moreTesting()\n";
51
+ echo "BaseClass::moreTesting() llamada \n";
52
52
}
53
53
}
54
54
55
55
class ChildClass extends BaseClass {
56
56
}
57
57
// Devuelve un error Fatal: Class ChildClass may not inherit from final class (BaseClass)
58
+ ?>
59
+ ]]>
60
+ </programlisting >
61
+ </example >
62
+ </para >
63
+ <example >
64
+ <title >Ejemplo de propiedad Final desde PHP 8.4.0</title >
65
+ <programlisting role =" php" >
66
+ <![CDATA[
67
+ <?php
68
+ class BaseClass {
69
+ final protected string $test;
70
+ }
71
+
72
+ class ChildClass extends BaseClass {
73
+ public string $test;
74
+ }
75
+ // Devuelve un error Fatal: Cannot override final property BaseClass::$test
58
76
?>
59
77
]]>
60
- </programlisting >
61
- </example >
62
- </para >
63
- <para >
64
- <example xml : id =" language.oop5.final.example.php81" >
65
- <title >Ejemplo de constantes finales a partir de PHP 8.1.0</title >
66
- <programlisting role =" php" >
78
+ </programlisting >
79
+ </example >
80
+ <example xml : id =" language.oop5.final.example.php81" >
81
+ <title >Ejemplo de constantes finales a partir de PHP 8.1.0</title >
82
+ <programlisting role =" php" >
67
83
<![CDATA[
68
84
<?php
69
85
class Foo
@@ -79,19 +95,22 @@ class Bar extends Foo
79
95
// Fatal error: Bar::X cannot override final constant Foo::X
80
96
?>
81
97
]]>
82
- </programlisting >
83
- </example >
84
- </para >
98
+ </programlisting >
99
+ </example >
85
100
86
- <note >
87
- <simpara >
88
- Las propiedades no pueden declararse como finales: sólo las clases, métodos y constantes (a partir de PHP 8.1.0) pueden declararse como finales.
89
- </simpara >
90
- <simpara >
91
- A partir de PHP 8.0.0, los métodos privados no pueden ser declarados finales excepto el constructor.
92
- </simpara >
93
- </note >
94
- </sect1 >
101
+ <note >
102
+ <simpara >
103
+ Desde PHP 8.0.0, los métodos privados no pueden declararse como finales,
104
+ excepto el <link linkend =" language.oop5.decon.constructor" >constructor</link >.
105
+ </simpara >
106
+ </note >
107
+ <note >
108
+ <simpara >
109
+ Una propiedad que se declara <link linkend =" language.oop5.visibility-members-aviz" ><literal >private(set)</literal ></link >
110
+ es implícitamente <literal >final</literal >.
111
+ </simpara >
112
+ </note >
113
+ </sect1 >
95
114
<!-- Keep this comment at the end of the file
96
115
Local variables:
97
116
mode: sgml
0 commit comments