mirror of
https://github.com/php/doc-ru.git
synced 2026-03-26 16:52:12 +01:00
128 lines
3.4 KiB
XML
128 lines
3.4 KiB
XML
<?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
|
||
-->
|