-
Notifications
You must be signed in to change notification settings - Fork 79
Expand file tree
/
Copy pathstatic.xml
More file actions
151 lines (132 loc) · 4.99 KB
/
Copy pathstatic.xml
File metadata and controls
151 lines (132 loc) · 4.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<?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
-->