File: static.xml

package info (click to toggle)
php-doc 20140201-1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 74,084 kB
  • ctags: 4,040
  • sloc: xml: 998,137; php: 20,812; cpp: 500; sh: 177; makefile: 63; awk: 28
file content (142 lines) | stat: -rw-r--r-- 3,696 bytes parent folder | download
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
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision: 326724 $ -->
 <sect1 xml:id="language.oop5.static" xmlns="http://docbook.org/ns/docbook">
  <title>Static Keyword</title>

  <tip>
   <simpara>
    This page describes the use of the <literal>static</literal> keyword to
    define static methods and properties. <literal>static</literal> can also
    be used to
    <link linkend="language.variables.scope.static">define static variables</link>
    and for
    <link linkend="language.oop5.late-static-bindings">late static bindings</link>.
    Please refer to those pages for information on those meanings of
    <literal>static</literal>.
   </simpara>
  </tip>

  <para>
   Declaring class properties or methods as static makes them accessible
   without needing an instantiation of the class. A property declared as
   static can not be accessed with an instantiated class object (though
   a static method can).
  </para>

  <para>
   For compatibility with PHP 4, if no <link
   linkend="language.oop5.visibility">visibility</link>
   declaration is used, then the property or method will be treated
   as if it was declared as <literal>public</literal>.
  </para>

  <para>
   Because static methods are callable without an instance of
   the object created, the pseudo-variable <varname>$this</varname> is
   not available inside the method declared as static.
  </para>
  
  <para>
   Static properties cannot be accessed through the object using the arrow
   operator -&gt;.
  </para>

  <para>
   Calling non-static methods statically generates an <constant>E_STRICT</constant> level warning.
  </para>

  <para>
   Like any other PHP static variable, static properties may only be
   initialized using a literal or constant; expressions are not
   allowed. So while you may initialize a static property to an
   integer or array (for instance), you may not initialize it to
   another variable, to a function return value, or to an object.
  </para>

  <para>
   As of PHP 5.3.0, it's possible to reference the class using a variable.
   The variable's value can not be a keyword (e.g. <literal>self</literal>,
   <literal>parent</literal> and <literal>static</literal>).
  </para>

  <example>
   <title>Static property example</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"; // As of PHP 5.3.0

print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>
]]>
   </programlisting>
  </example>

  <example>
   <title>Static method example</title>
    <programlisting role="php">
<![CDATA[
<?php
class Foo {
    public static function aStaticMethod() {
        // ...
    }
}

Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod(); // As of PHP 5.3.0
?> 
]]>
    </programlisting>
  </example>

 </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
-->