1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-24 07:42:22 +01:00
Files
archived-doc-ru/language/oop5/static.xml
2025-02-12 15:34:12 +03:00

152 lines
5.0 KiB
XML
Raw Permalink 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: 888507ca9ed7a8517edbf2d00a64fcaf5865aa23 Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<sect1 xml:id="language.oop5.static" xmlns="http://docbook.org/ns/docbook">
<title>Ключевое слово static</title>
<tip>
<simpara>
Эта страница описывает использование ключевого слова
<literal>static</literal>
для определения статических методов и свойств. <literal>static</literal> также
может использоваться для <link linkend="language.variables.scope.static">определения
статических переменных</link>, <link linkend="functions.anonymous-functions.static">определения статических анонимных функций</link>
и <link linkend="language.oop5.late-static-bindings">позднего статического связывания</link>.
Для получения информации о таком применении ключевого слова <literal>static</literal> обратитесь по вышеуказанным страницам.
</simpara>
</tip>
<para>
Объявление свойств и методов класса статическими позволяет обращаться к ним
без создания экземпляра класса.
К ним также можно получить доступ статически в созданном экземпляре объекта класса.
</para>
<sect2 xml:id="language.oop5.static.methods">
<title>Статические методы</title>
<para>
Так как статические методы вызываются без создания экземпляра класса,
то псевдопеременная <varname>$this</varname> недоступна внутри статических методов.
</para>
<warning>
<para>
Вызов нестатических методов статически вызывает ошибку <classname>Error</classname>.
</para>
<para>
До PHP 8.0.0 вызов нестатических методов статически был объявлен устаревшим
и вызывал ошибку уровня <constant>E_DEPRECATED</constant>.
</para>
</warning>
<example>
<title>Пример статического метода</title>
<programlisting role="php">
<![CDATA[
<?php
class Foo {
public static function aStaticMethod() {
// ...
}
}
Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod();
?>
]]>
</programlisting>
</example>
</sect2>
<sect2 xml:id="language.oop5.static.properties">
<title>Статические свойства</title>
<para>
Доступ к статическим свойствам осуществляется с помощью <link linkend="language.oop5.paamayim-nekudotayim">оператора разрешения области видимости</link>
(<literal>::</literal>), и к ним нельзя получить доступ через оператор объекта (<literal>-&gt;</literal>).
</para>
<para>
На класс можно ссылаться с помощью переменной.
Значение переменной в таком случае не может быть ключевым
словом (например, <literal>self</literal>, <literal>parent</literal> и
<literal>static</literal>).
</para>
<example>
<title>Пример статического свойства</title>
<programlisting role="php">
<![CDATA[
<?php
class Foo
{
public static $my_static = 'foo';
public function staticValue() {
return self::$my_static;
}
}
class Bar extends Foo
{
public function fooStatic() {
return parent::$my_static;
}
}
print Foo::$my_static . "\n";
$foo = new Foo();
print $foo->staticValue() . "\n";
print $foo->my_static . "\n"; // Не определено свойство my_static
print $foo::$my_static . "\n";
$classname = 'Foo';
print $classname::$my_static . "\n";
print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>
]]>
</programlisting>
&example.outputs.8.similar;
<screen>
<![CDATA[
foo
foo
Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23
Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23
foo
foo
foo
foo
]]>
</screen>
</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
-->