@@ -10,7 +10,7 @@ Namespaces are defined the following way:
10
10
11
11
Zend/DB/Connection.php:
12
12
<?php
13
- namespace Zend:: DB;
13
+ namespace Zend\ DB;
14
14
15
15
class Connection {
16
16
}
@@ -27,127 +27,127 @@ The namespace declaration statement must be the very first statement in
27
27
the file. The only exception is "declare" statement that can be used before.
28
28
29
29
Every class and function in a namespace can be referred to by the full name
30
- - e.g. Zend::DB:: Connection or Zend::DB:: connect - at any time.
30
+ - e.g. Zend\DB\ Connection or Zend\DB\ connect - at any time.
31
31
32
32
<?php
33
33
require 'Zend/Db/Connection.php';
34
- $x = new Zend::DB:: Connection;
35
- Zend::DB:: connect();
34
+ $x = new Zend\DB\ Connection;
35
+ Zend\DB\ connect();
36
36
?>
37
37
38
38
Namespace or class name can be imported:
39
39
40
40
<?php
41
41
require 'Zend/Db/Connection.php';
42
- use Zend:: DB;
43
- use Zend::DB:: Connection as DbConnection;
42
+ use Zend\ DB;
43
+ use Zend\DB\ Connection as DbConnection;
44
44
45
- $x = new Zend::DB:: Connection();
46
- $y = new DB:: connection();
45
+ $x = new Zend\DB\ Connection();
46
+ $y = new DB\ connection();
47
47
$z = new DbConnection();
48
- DB:: connect();
48
+ DB\ connect();
49
49
?>
50
50
51
51
The use statement only defines name aliasing. It may create name alias for
52
- namespace or class. The simple form of statement "use A::B::C:: D;" is
53
- equivalent to "use A::B::C:: D as D;". The use statement can be used at any
52
+ namespace or class. The simple form of statement "use A\B\C\ D;" is
53
+ equivalent to "use A\B\C\ D as D;". The use statement can be used at any
54
54
time in the global scope (not inside function/class) and takes effect from
55
55
the point of definition down to the end of file. It is recommended however to
56
56
place the use statements at the beginning of the file. The use statements have
57
57
effect only on the file where they appear.
58
58
59
- The special "empty" namespace (:: prefix) is useful as explicit global
60
- namespace qualification. All class and function names started from ::
59
+ The special "empty" namespace (\ prefix) is useful as explicit global
60
+ namespace qualification. All class and function names started from \
61
61
interpreted as global.
62
62
63
63
<?php
64
- namespace A::B:: C;
64
+ namespace A\B\ C;
65
65
66
- $con = :: mysql_connect(...);
66
+ $con = \ mysql_connect(...);
67
67
?>
68
68
69
69
A special constant __NAMESPACE__ contains the name of the current namespace.
70
70
It can be used to construct fully-qualified names to pass them as callbacks.
71
71
72
72
<?php
73
- namespace A::B:: C;
73
+ namespace A\B\ C;
74
74
75
75
function foo() {
76
76
}
77
77
78
- set_error_handler(__NAMESPACE__ . ":: foo");
78
+ set_error_handler(__NAMESPACE__ . "\ foo");
79
79
?>
80
80
81
81
In global namespace __NAMESPACE__ constant has the value of empty string.
82
82
83
83
Names inside namespace are resolved according to the following rules:
84
84
85
85
1) all qualified names are translated during compilation according to
86
- current import rules. So if we have "use A::B:: C" and then "C::D:: e()"
87
- it is translated to "A::B::C::D:: e()".
86
+ current import rules. So if we have "use A\B\ C" and then "C\D\ e()"
87
+ it is translated to "A\B\C\D\ e()".
88
88
2) unqualified class names translated during compilation according to
89
- current import rules. So if we have "use A::B:: C" and then "new C()" it
90
- is translated to "new A::B:: C()".
89
+ current import rules. So if we have "use A\B\ C" and then "new C()" it
90
+ is translated to "new A\B\ C()".
91
91
3) inside namespace, calls to unqualified functions that are defined in
92
92
current namespace (and are known at the time the call is parsed) are
93
93
interpreted as calls to these namespace functions.
94
94
4) inside namespace, calls to unqualified functions that are not defined
95
95
in current namespace are resolved at run-time. The call to function foo()
96
- inside namespace (A:: B) first tries to find and call function from current
97
- namespace A::B:: foo() and if it doesn't exist PHP tries to call internal
96
+ inside namespace (A\ B) first tries to find and call function from current
97
+ namespace A\B\ foo() and if it doesn't exist PHP tries to call internal
98
98
function foo(). Note that using foo() inside namespace you can call only
99
- internal PHP functions, however using :: foo() you are able to call any
99
+ internal PHP functions, however using \ foo() you are able to call any
100
100
function from the global namespace.
101
101
5) unqualified class names are resolved at run-time. E.q. "new Exception()"
102
102
first tries to use (and autoload) class from current namespace and in case
103
103
of failure uses internal PHP class. Note that using "new A" in namespace
104
104
you can only create class from this namespace or internal PHP class, however
105
- using "new :: A" you are able to create any class from the global namespace.
105
+ using "new \ A" you are able to create any class from the global namespace.
106
106
6) Calls to qualified functions are resolved at run-time. Call to
107
- A::B:: foo() first tries to call function foo() from namespace A:: B, then
108
- it tries to find class A:: B (__autoload() it if necessary) and call its
107
+ A\B\ foo() first tries to call function foo() from namespace A\ B, then
108
+ it tries to find class A\ B (__autoload() it if necessary) and call its
109
109
static method foo()
110
110
7) qualified class names are interpreted as class from corresponding
111
- namespace. So "new A::B:: C()" refers to class C from namespace A:: B.
111
+ namespace. So "new A\B\ C()" refers to class C from namespace A\ B.
112
112
113
113
Examples
114
114
--------
115
115
<?php
116
116
namespace A;
117
117
foo(); // first tries to call "foo" defined in namespace "A"
118
118
// then calls internal function "foo"
119
- :: foo(); // calls function "foo" defined in global scope
119
+ \ foo(); // calls function "foo" defined in global scope
120
120
?>
121
121
122
122
<?php
123
123
namespace A;
124
124
new B(); // first tries to create object of class "B" defined in namespace "A"
125
125
// then creates object of internal class "B"
126
- new :: B(); // creates object of class "B" defined in global scope
126
+ new \ B(); // creates object of class "B" defined in global scope
127
127
?>
128
128
129
129
<?php
130
130
namespace A;
131
- new A(); // first tries to create object of class "A" from namespace "A" (A:: A)
131
+ new A(); // first tries to create object of class "A" from namespace "A" (A\ A)
132
132
// then creates object of internal class "A"
133
133
?>
134
134
135
135
<?php
136
136
namespace A;
137
- B:: foo(); // first tries to call function "foo" from namespace "A:: B"
137
+ B\ foo(); // first tries to call function "foo" from namespace "A\ B"
138
138
// then calls method "foo" of internal class "B"
139
- ::B:: foo(); // first tries to call function "foo" from namespace "B"
139
+ \B\ foo(); // first tries to call function "foo" from namespace "B"
140
140
// then calls method "foo" of class "B" from global scope
141
141
?>
142
142
143
143
The worst case if class name conflicts with namespace name
144
144
<?php
145
145
namespace A;
146
- A:: foo(); // first tries to call function "foo" from namespace "A:: A"
146
+ A\ foo(); // first tries to call function "foo" from namespace "A\ A"
147
147
// then tries to call method "foo" of class "A" from namespace "A"
148
148
// then tries to call function "foo" from namespace "A"
149
149
// then calls method "foo" of internal class "A"
150
- ::A:: foo(); // first tries to call function "foo" from namespace "A"
150
+ \A\ foo(); // first tries to call function "foo" from namespace "A"
151
151
// then calls method "foo" of class "A" from global scope
152
152
?>
153
153
0 commit comments