-
Notifications
You must be signed in to change notification settings - Fork 84
Expand file tree
/
Copy pathstatic.xml
More file actions
165 lines (142 loc) · 4.59 KB
/
Copy pathstatic.xml
File metadata and controls
165 lines (142 loc) · 4.59 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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 888507ca9ed7a8517edbf2d00a64fcaf5865aa23 Maintainer: takagi Status: ready -->
<!-- CREDITS: hirokawa,shimooka,mumumu -->
<sect1 xml:id="language.oop5.static" xmlns="http://docbook.org/ns/docbook">
<title>static キーワード</title>
<tip>
<simpara>
このページでは、<literal>static</literal>
キーワードを使って static メソッド や
static プロパティを定義する方法を説明します。
<literal>static</literal> は、
<link linkend="language.variables.scope.static">static 変数</link>
や <link linkend="functions.anonymous-functions.static">static な無名関数</link>、そして
<link linkend="language.oop5.late-static-bindings">遅延静的束縛</link>
にも使えます。これらの場合の <literal>static</literal> の使い方は、
それぞれのページを参照ください。
</simpara>
</tip>
<para>
クラスプロパティもしくはメソッドを static として宣言することで、
クラスのインスタンス化の必要なしにアクセスすることができます。
static として宣言されたプロパティやメソッドは、
インスタンス化されたオブジェクトの内部からも :: (スコープ定義演算子) を使ってコールできます。
</para>
<sect2 xml:id="language.oop5.static.methods">
<title>static メソッド</title>
<para>
static メソッドはオブジェクトのインスタンスを生成せずに
コールすることができるので、疑似変数 <varname>$this</varname> は、
static として宣言されたメソッドの内部から利用することはできません。
</para>
<warning>
<para>
static でないメソッドをstaticメソッドとしてコールすると、
<classname>Error</classname> がスローされます。
</para>
<para>
PHP 8.0.0 より前のバージョンでは、
static でないメソッドをstaticメソッドとしてコールすることが非推奨になっており、
<constant>E_DEPRECATED</constant> レベルの警告が発生していました。
</para>
</warning>
<example>
<title>static メソッドの例</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>static プロパティ</title>
<para>
static プロパティは、
<link linkend="language.oop5.paamayim-nekudotayim">スコープ定義演算子</link>
を使ってアクセスできますが、
オブジェクト演算子 (<literal>-></literal>) を使ってアクセスすることはできません。
</para>
<para>
変数を用いてクラスを参照することも可能です。
変数の値に (<literal>self</literal> や <literal>parent</literal>、
<literal>static</literal> といった)
キーワードを指定することはできません。
</para>
<example>
<title>static プロパティの例</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"; // Undefined "Property" 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
-->