mirror of
https://github.com/php/doc-ru.git
synced 2026-03-24 07:42:22 +01:00
152 lines
5.0 KiB
XML
152 lines
5.0 KiB
XML
<?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>-></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
|
||
-->
|