1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-26 16:52:12 +01:00
Files
archived-doc-ru/language/oop5/final.xml
2024-02-27 11:09:09 +03:00

128 lines
3.4 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 5e8652131e898cd3d02cd26eeb26da718a6aaf65 Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<sect1 xml:id="language.oop5.final" xmlns="http://docbook.org/ns/docbook">
<title>Ключевое слово final</title>
<para>
Ключевое слово <literal>final</literal>, которое указали перед определением метода или константы,
не даёт дочерним классам переопределять этот метод или константу.
Ключевое слово не даст расширить класс, если класс определили окончательным.
</para>
<para>
<example>
<title>Пример окончательных методов</title>
<programlisting role="php">
<![CDATA[
<?php
class BaseClass
{
public function test()
{
echo "Вызван метод BaseClass::test()\n";
}
final public function moreTesting()
{
echo "Вызван метод BaseClass::moreTesting()\n";
}
}
class ChildClass extends BaseClass
{
public function moreTesting()
{
echo "Вызван метод ChildClass::moreTesting()\n";
}
}
// Приводит к фатальной ошибке: Cannot override final method BaseClass::moreTesting()
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Пример окончательного класса</title>
<programlisting role="php">
<![CDATA[
<?php
final class BaseClass
{
public function test()
{
echo "Вызван метод BaseClass::test()\n";
}
// Поскольку класс уже окончательный, ключевое слово final избыточно
final public function moreTesting()
{
echo "Вызван метод BaseClass::moreTesting()\n";
}
}
class ChildClass extends BaseClass {}
// Приводит к фатальной ошибке: Class ChildClass may not inherit from final class (BaseClass)
?>
]]>
</programlisting>
</example>
</para>
<para>
<example xml:id="language.oop5.final.example.php81">
<title>Пример окончательной константы, которые появились в 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";
}
// Фатальная ошибка: Bar::X cannot override final constant Foo::X
?>
]]>
</programlisting>
</example>
</para>
<note>
<simpara>
Свойства нельзя объявлять окончательными: только классы, методы и константы (с PHP 8.1.0)
разрешено объявлять окончательными.
</simpara>
<simpara>
С PHP 8.0.0 закрытые методы, кроме конструктора, нельзя объявлять окончательными.
</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
-->