管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
1.命名空间的作用:
d6 V& f$ N' X% A7 C
& L9 t4 D+ `! _: Y0 N, }在PHP中函数、类、常量是不允许同名的。为了解决这三者的同名问题,所以出现了命名空间. 其实不仅仅是php,其他语言也有类似的使用。比如JavaScript中:. {( j; Z! A" X$ \3 g
1 j: I+ c) O, c ?5 r% r3 J
- T- x% J/ I$ `: P$ |9 b1 t# ^
8 M2 R5 [# ?1 W6 V( h( o" Z我们来详细的讲解一下PHP中的命名空间:. j; P" G) W( _5 i
8 ~' Y, u t$ \5 r
语法:namespac_e 空间名\空间名;# {. W0 X. I; v& T* m2 }! B# R
3 z# U1 Y5 r& h. y2 T说明: 用于定义空间名;如果一个php文件中,第一个空间的定义义必须放在第1行。如果所要定义的空间已存在,则是进入空间。代码示例如下:' R, R0 h. F1 `
: u. z8 e) ]" C, {. F----------------------------------------------------------------------------) I" T6 i/ [1 D& N/ q% |
4 j. A) R; [& D- o; o1 r, O4 F<php
$ q+ [+ |8 T, @9 a( S# W# L3 \2 M' E! z! V, l
namespoc_e AA;+ E) y- Z& o% a/ L4 R* h
functio_n showInfo(){$ j: W. I2 n& E4 X" {
echo __METHOD__,'<br/>';; H# _$ U4 |& _5 I
}
) k5 _, Z# ^/ D6 q; n7 x$ @showinfo();
' y: S5 L9 N% d o' a" W. S/ _6 e/ g! N# m: y6 |
namespoc_e AA\BB;
" c+ @9 n6 ^0 E, ?! N- W7 Z
+ K& m9 J! n! E3 Mfunctio_n showInfo(){8 e8 f/ A, ^# Q
echo __METHOD__,'<br/>';
5 {, G/ e, @2 B3 C}2 G. \% j! h" @; c8 M4 o. g$ U
//showInfo();7 L" k7 f { E0 v# _3 ?& D" M
----------------------------------------------------------------------------
7 x3 w/ t7 D; v# |& x7 S; J2.空间成员:所谓空间成员就是,空间所影响的,空间只影响类、函数、常量(const)% f* `) S9 x' {$ _
( j$ P: Y7 w( \4 I, T4 t
3.空间成员的访问:访问方式分为限定,非限定,完全访问,之间的区别,我们使用代码来说明一下。
O! h, b+ v9 D
5 _, m6 w" Z, W- N----------------------------------------------------------------------------% S( ]7 L7 O* n8 ~
. Z% ~7 u! B9 M
<php1 Z0 T5 D. I6 {
namespoc_e AA\BB;& f. R) i1 Z( l R* ^- E5 ~( ]
functio_n showInfo(){% K I4 b t" Y' Q8 z$ h
echo __METHOD__,'<br/>';4 z% d( Y4 m( ~& Q
}1 ]7 a4 |$ J/ I
namespoc_e CC;
: l2 Q* b1 f4 S6 |9 P H( Ofunctio_n showInfo(){
/ _" P' N6 N8 ~! X: } echo __METHOD__,'<br/>';: v: J$ s* I! a
}- K6 [7 i- P5 H: B" x& d
namespoc_e AA;
8 Z$ T B7 [( d/ d; V0 Ofunctio_n showInfo(){6 ?' I# Q! }' r N5 p7 C
echo __METHOD__,'<br/>';/ X9 g# C$ ~# Z% r2 G% H
}* O+ ]; s: @- _
//非限定访问:用于访问当前空间中的成员8 y5 S; o; r% b! P, N! S: q8 _
showInfo();
) S( X ]: A: [1 b- p) f& Q5 y//限定访问:只能访问当前所在的空间的子空间中的成员
, I% p" v5 u& j% u& [# i- qBB\showInfo();
( t( ] c5 \% O3 A" r6 P9 Z5 i* q//完全限定:可以访问其它所有的空间的成员
9 e3 z; Q p9 _4 x9 B( i" k\CC\showInfo();7 B3 d( m: [- { |
↑根空间标识符
- E# E; R( t! o9 l0 F* k: ^2 Y G: K3 x----------------------------------------------------------------------------
& P' j& ^* A6 f3 O/ _( @# X但是在实际的使用中,我们很多类和方法都是在不同的文件中,这就涉及到引入的问题,也就是在实际开发中,我们经常会在一个文件中引入另一个php文件。这种情况下有两种情况:
1 g! t. k' c8 H/ k# a/ {
/ @$ ], \$ g8 \. w+ R当前文件有空间的定义,被引入的文件中没有空间的定义,但是有空间成员。被引入的空间成员会被放在公共空间(根空间)( u4 Y6 h0 h9 B ~1 k' ~
I J* h! t3 G5 C- t6 r代码示例如下:
# n" v- h: @$ ?- P; C; Y& L$ i5 J5 o5 y) E2 D
----------------------------------------------------------------------------) X5 n" |3 ?* l, o4 Z& E# ]
0 v) e/ t4 C, K4 I8 j3 k$ V( b' T+ ~6 F* q
04inc.php' G- g& j5 P5 }% S
<php* V0 B- [8 U; u* d& \" }5 O
. S; Y. Z2 a, c3 C; n6 anamespoc_e Core;/ \3 x% g# U8 m% o2 U! X! v
include '05ou.php';
) |. C z4 \- @; @9 nnew \AdminController();
1 P9 B" v4 A5 @+ w. @0 XshowInfo();. u) \$ r7 g* Y
6 p9 I' m/ d4 l& Recho P;# w5 w: |" @8 |! _
//根空间中的成员,只要类的访问必须加‘/’- B' j% y9 g! H. V, r6 ]8 |% H8 y
---------------------------------------------------------------------------- E. d3 J9 H; i
) ~' A" ~1 o* g! p! Y p
05ou.php
2 U, K4 d) j0 H; X+ N: {9 I1 K9 m<php
! G: M+ o. u9 F$ m2 fconst P=5;
6 ~# m! w. \' ]4 W5 F& X' D
7 h4 }- o6 j4 ], j5 r% wfunctio_n showinfo(){7 H4 H1 x* {; g
echo __METHOD__,'<br/>';
& L: B9 A( s+ Q& R}
! x" S2 b6 @7 O5 i1 S$ q& h& w' Y" F# b) F; U
clas_s AdminController{
3 K {- ]( V% y: C( l1 E2 M# H public functio_n __construct(){
Z! x# s- b1 I# p# U. ` echo __METHOD__,'<br/>';
# E) i1 j# D. w R6 T }
/ m+ w" u2 K) ^+ n6 |: B: P9 q}
" l+ ^; @$ b' p1 I# W* N
5 z, ~ L$ \1 h- w第二种情况:当前文件有空间的定义,被引入的文件中有空间的定义,并不会中断当前空间的定义。
, {0 o& _2 i4 O- i; k1 Y----------------------------------------------------------------------------" I, g9 p) ]6 D1 o' M# u# o
04inc.php5 n1 d& w4 ~1 x! M$ a* V, x$ R
<php0 E3 J3 W0 t; _
* f1 h6 K# g. M9 xnamespoc_e Core;
+ ~$ m& W, C, Ginclude '05ou.php';
+ j7 \4 V" o* ], C0 g, C/ ]% p. {$ yfunctio_n showinfo(){
2 y- H5 S; K$ V6 X1 L# y. w echo __METHOD__,'<br/>';9 x0 m( M: ?5 x$ @* Z# ?, a: N
}9 O8 Y( `) T. L. R3 G
9 {2 q# P6 k. |1 K1 \* v; @
new \Controller\AdminController;+ A: Q. I' l# C9 w5 B
----------------------------------------------------------------------------
7 @; `- I1 o# m4 j. u5 ~05ou.php
( H, }/ j. e+ P! S9 P: f<php
[$ k! ^" f: R' r- g* `' J$ Nnamespoc_e Controller;+ u0 Y+ L. F5 }. }* n# ?9 k
% J/ U! \1 S2 ?& M
clas_s AdminController{
: j! {) [! _7 I( {% H- \% _& J5 X2 f public functio_n __construct(){/ O9 s9 ^, N2 S, x1 b( _/ _- B( B
echo __METHOD__,'<br/>';
: W6 W7 y4 q, M1 | l0 T }
2 U0 \5 z. \9 h8 N+ B4 Z8 z; b5 C P}
. g2 m$ O1 E9 W$ s2 J' d----------------------------------------------------------------------------
' ~/ z+ x N3 N' t$ C6 l6 K; {0 s
+ I% p' I9 i* M4.引入空间成员:
; g% T0 T- ~" h" E" \
6 W( Z3 d7 t0 W# q1.use 空间名\空间名 【as 别名】:将指定空间引入到当前空间。同可以使用as关键字为被引入的空间起个别名。& a7 @2 |& V# C' R# n5 s
8 w! U8 E# U% P6 G
----------------------------------------------------------------------------* g* t4 q( p4 G8 a) s+ @. O4 `
& d6 z. f0 \. z# S9 p& j& ?5 y( w4 m
04inc.php
5 G! z" d% Z5 h0 L5 b: L0 Y<php
$ a" U+ V! u Mnamespoc_e Core;
- h$ c0 X* V" g& i5 Kuse Admin\Controller as con;
* V. G# T, r3 \9 ^( o2 L+ E+ J
8 B9 a5 G# @) x' y) @include '05ou.php';: j. w! w+ S0 c, P3 `( B
/ b! I- ]- m2 {8 @% y4 Onew con\AdminController();
- B6 i' c' B$ \1 L----------------------------------------------------------------------------
+ ~9 e! o6 L& S- G9 @/ I5 s( _$ m, Y05ou.php4 [- M: C, h: u- i7 ] }& K
<php
4 m, s* |0 u! i+ c/ Anamespoc_e Admin\Controller;# Q( a P: d3 J2 R1 q2 _
9 c7 d o7 k4 V O8 Y( r* Gclas_s AdminController{
5 ` g) ~' X3 @) ?$ f public functio_n __construct(){
% M1 h6 j" q" } echo __METHOD__,'<br/>';
3 F$ h/ L( `, {& k% k }
0 G1 _: k& k; w% r, J}
- f& b) a; k7 P0 ?9 t0 z3 o4 m" V----------------------------------------------------------------------------0 E5 G% Q! E4 |9 k3 a: J* G" A
2.use 空间名\空间名\成员类 【as 别名】:将指定的空间中的成员引入到当前空间,引入空间成员只能引入类。
! k1 E2 m# j9 @7 j# l2 X3 W4 ?- n, @ c3 S+ w
----------------------------------------------------------------------------
$ E5 L& I: g9 v% H n3 D
; i M7 U: q5 ~3 j9 `5 p' |04inc.php2 ^7 \* \/ k5 s+ A$ w7 c5 }0 k n$ E, h
<php' a: q* I4 U k( `0 \$ S4 v& u) K
//引入空间成员类
& O- [9 R8 A# k0 K) \, s
; V% I3 C8 B y9 }! M+ \& }! jnamespoc_e Core;8 H) A1 Z4 s1 b$ Q2 a/ W
use Admin\Controller\AdminController;
4 K" J/ D. [ l! F7 B( Vinclude '05ou.php';
3 h- x% E2 `3 S& R9 ? u
$ V; r5 r* m/ A3 w9 nnew AdminController();. B+ X( D8 p) p+ ~
----------------------------------------------------------------------------- }: j& o8 Q+ i' S/ m6 t6 `( {+ _
05ou.php- g% g1 F/ `3 V. C1 [5 ?
<php# o' F! `# q3 W. W3 [
namespoc_e Admin\Controller;
9 q A0 i% n2 Y6 q' u6 }- ` s9 [. x$ f- r
clas_s AdminController{
( x: I) s! C3 i, c( o public functio_n __construct(){
, M( v d# Q# X D3 Q echo __METHOD__,'<br/>';$ |# e+ w# T7 d9 h3 G
}
( E2 ^. J3 g G7 L5 d1 S}* M$ A% `. V# c7 x
----------------------------------------------------------------------------+ R% z8 ~! G. t/ s, s% ~
5.空间命名的方式:空间名我们可以任意的定义,但是如果命名更有意义呢。一般我们会以类文件所在的文件夹为空间名。其实主要的就是方便按照某种约定成俗的规则加载文件。/ i6 Z' ]3 ~1 z9 Q% e4 x( N
' q u( E, X- _
* ^+ S4 }7 H" R这里我们只是简单的介绍了一下命名空间的作用和使用。其实很多框架内部也是这样的使用。不同的类在不同的空间,相互之间的引用也是遵循着相应引入规则。
2 U' P" E+ Q# ^6 m9 T
- W- F/ T. u% P) }' N" a2 z1 i, j) X
8 y3 n' ]3 i) K% k
/ s( ~# @5 t+ f9 G9 ^/ l3 [. ^+ t3 x% }; k/ f; V! \: r5 D6 d
3 S% m m- S& V1 {$ Q% c) J
|
|