返回列表 发新帖

php中预定义的6种接口介绍

574.8k 9
swmozowtfl 发表于 2015-7-28 11:32:32|湖北 | 查看全部 阅读模式
  这篇文章主要介绍了php中预定义的6种接口介绍,本文讲解了traversable、iterator、iteratoraggregate、arrayaccess、serializable、closure,需要的朋友可以参考下5 f8 I: g  s, g( M* T
  php预定义了6个接口介绍如下:/ p7 G. X, R9 I4 ~5 B4 Z% d0 M
  1.traversable遍历接口
* U- O  C% o" q6 O  呵呵!其实它不是一个在php中可以使用的接口,内部类才可使用,它有一个用途就是检测一个类是否可以遍历。
+ Z8 i! d5 o5 T2 s  ?
1 G  J! T- m6 r
            1
6 i( i% D; ~5 _. \3 N. w            2
, ^7 G/ N/ R) O% S7 p4 S            3, Q9 A# ^1 x  f% t
            
                        if($class instanceof traversable) {
& U7 l8 E1 }5 d9 g. X, W            //foreach: N3 q3 ^; ?. n5 l$ P$ s# x6 F
            }  r4 ^# i) w! X' j5 Z
            ' v8 h. H. f; Q+ ]* w# Z
            
  2.iterator迭代器接口2 v% _8 P8 v* M+ o
  接口摘要:8 p" c. i/ t2 {2 o5 i  e
  ?( a- ^. o+ U* {& B% C0 `
            1
1 G2 K; S1 r3 C5 u. R! ]            2. ]: a9 B5 U2 h1 A4 O) d1 B
            34 W* b3 A; b" Y, M1 W
            4. ?% w( R( P, G' ]8 q* @
            5
2 w. j; m2 ~1 a3 Y5 v/ h            6& t7 f7 ?2 m( Z6 j! J: Z+ L
            7
# R/ G! u( T$ H+ k            80 c; \+ ]$ ?) t  u
            96 ^# x% G) K' s$ X7 g
            10  M; i- e4 a9 @, x% O! r; C1 `
            11
" H% q1 r3 X% o( T1 q            12( I( n# C4 d& F5 q! W0 l- D+ V
            13  c# n* D4 P' _9 Y, i, k
            
                        iterator extends traversable* h3 \# \  L6 Q# J  |  K! e
            {6 ~) G# M6 L8 |9 }; t2 B! |0 D4 r
            //返回当前索引游标指向的元素' u: p2 t6 Z4 p1 c
            abstract public mixed current(void). V7 Z* y0 s4 n0 J
            //返回当前索引游标指向的元素的键名; ]4 P' Q- _0 H6 h8 `" ?! t
            abstract public scalar key(void)3 f: J1 q1 N" O# v$ f8 F; @) `
            //移动当前索引游标指向下一元素
* w, E1 n' c3 w0 |5 ?$ M* c2 b            abstract public void next(void)
- }  Q/ I! U- B; q# }            //重置索引游标的指向第一个元素
, P7 |# _2 B/ \# r4 U3 H! U            abstract public void rewind(void)' G, F1 Q5 |& X
            //判断当前索引游标指向的是否是一个元素,常常在调用 rewind()或  next()使用
' T+ k/ D1 h9 L4 m# P            abstract public boolean valid(void); {# P7 C/ i+ i& ~7 \8 x
            }# B/ u! n  v6 }& r3 E
            ; ^$ S2 {& ]% z# i
            
  以上可以让一个类实现一个基本的迭代功能,如下可以看到迭代的调用顺序:. J9 ^0 ^4 p$ c
  ?
. T. M+ b) s8 H- }9 a) W5 g1 h
            1
# l- g8 V" N7 A8 N1 J) _            2# Y4 I6 u1 L% i
            3! w7 [9 w( p, b5 J
            4
% w/ f+ x* {7 H1 k" j! n            5' Y/ x. _) T5 X3 A& U
            6
( w. A7 N6 E7 K            7, n% }- b  A- ^: e
            8
. [( |# g$ g+ U: k. H7 P* N: W) X            95 o* v4 W9 L0 y/ r* w
            10" g8 Y! o" ]% P. X: }
            11
5 N( U! g! u, }; I) L            12
6 t+ ^: s4 e* B: g* _2 z4 A% G            13: {, F5 s/ z6 s5 T
            14. w, h6 n& W0 v+ j0 q. n
            15
1 f$ }, ]9 P. o+ m            16
( q! Q  h! n" z8 ]/ @            17' u) C) k- a& q- W
            18
7 F( u: j9 l- v/ a' j) Y* u* n            19  m6 w% e' Z2 \0 `+ I
            20, p% H- X4 `. }9 W7 u
            21
: {/ h6 D+ f0 f- ^4 k            22
% X$ H" p) \) ?0 v( \; J, \( _2 ^            23! ~1 q7 Y1 D% ?. D/ O# V; {
            24
! {) ^' i& K" F+ }7 s& ^            25; N& c1 @4 ?4 j* H
            26
2 R8 Z) Z3 h4 G  ?0 P            270 ~3 z# W, c1 f  E2 g# E5 @
            283 k8 H( l* Z" m, D+ r  B& ]$ H% W- D
            29! E7 ^: t( a3 P' N& p  O2 _7 Q
            30, u) g3 o* {) ?* G. i' U
            31: [0 U5 H2 N5 x  W. l  \
            32
2 {* l7 J0 Q% B9 A            339 V. a% I2 @0 n. u
            349 Y4 y5 t+ V( N" g
            35
: D4 p/ [. p' ~" @3 b            36
& G3 m$ m0 l4 u0 S7 _: |            37
* n* H, t6 e7 r4 m* J/ k# T! f/ t            38
2 ~$ e5 b! }+ b" U& m" h& h            39' ]2 g+ Y8 K; @4 O
            40# Q* }7 {( U. L/ r  Q$ f
            41
( D- `1 L# s  W& a. c, c            42
  {; T: }# K& {) |$ R! t! M6 @            43, M& F# C8 o: C3 ^8 t0 d
            44- ?! N/ K, ?- m$ t
            
                        class myiterator implements iterator {
: ~5 \5 J- i, S9 r            private $position = 0 ;
1 F: R! V$ F4 s3 ]            private $array = array(4 ~( `9 m) e, G1 B* o' C4 L
            "firstelement" ,2 m5 R3 @% N  ~; J+ \2 Y! o. c
            "secondelement" ,6 T$ E. A& C+ @+ j7 U' r( c' R
            "lastelement" ,
6 F; C: ]( ~& U& J/ N0 l, u, `( P' T            );  ]* i3 `& Z0 X6 ?4 l1 [6 ~) C0 C
             - O, J- S! H, P( N/ v# D
            public function __construct () {
) w+ L( h0 a3 b            $this -> position = 0 ;
( I  {/ I7 `5 D: l" C# ^( Y9 Q2 V            }
7 [6 i0 _# x" |             " `  _3 N# _; c# v
            function rewind () {
9 N+ W- S7 G. m            var_dump ( __method__ );
5 g5 C* Q7 w8 U! E( {- b$ }            $this -> position = 0 ;: O3 Z: C7 m! i& R
            }( s2 Z! U2 @$ Q1 g. _+ f4 h/ g
            
+ x: t: L+ N' U/ W. h# y" a3 c            function current () {, B( ?0 P! {/ q, U
            var_dump ( __method__ );0 e& X3 h* D% C
            return $this -> array [ $this -> position ];$ N9 ?+ g( \6 F0 \
            }
  T' s9 d0 j# g" I6 t& d  G            
; T0 [! X9 H* m+ ^  [, e            function key () {, N+ W8 V+ A1 w
            var_dump ( __method__ );4 @8 y+ h$ j  Y+ U
            return $this -> position ;# [( R, b/ k6 \, u' l) |
            }
1 T5 e3 V* y' Z! s  A$ z             : e: m- t2 Z: N( x1 V
            function next () {; Q$ T, H; t9 t/ [$ x6 X
            var_dump ( __method__ );
" L& c) v" s' Y. k' A) w; p            ++ $this -> position ;
) Y/ B7 ^% x- }8 p2 w! y+ }) A            }# T' P1 b6 A6 `, g9 ?! g! Q
             ; _" k9 L" f) Z6 V3 _* L2 W6 B
            function valid () {
0 j: ^  [2 b3 b. f- }! ~) ?$ V/ |            var_dump ( __method__ );
  I- \/ P) V' W' j5 e7 `4 B            return isset( $this -> array  [ $this -> position ]);) a) M) q: f+ o2 {) w! B  h
            }
3 b+ I6 [9 n0 f" L" U2 M            }4 W) t3 I3 I' h. m( z, u
             & T$ U7 }6 Y/ c4 F5 r9 [
            $it =  new myiterator ;  b$ W- J5 Y3 n: k, W
             8 V: a+ ^6 \  r- {
            foreach( $it as $key =>  $value ) {, k7 [  I( a; y( g( M% l
            var_dump ( $key , $value );
: @3 e) H4 Q8 Q            echo "\n" ;: A8 t) G0 {( a! ~/ G! L
            }
( r) \. k2 F6 T' a7 u! j9 |7 s            
8 z  g1 T5 a7 u% E/ {; n0 n. k- F            
  3.iteratoraggregate聚合式迭代器接口
. H. f* P, R$ e# V1 z" {/ ?2 I  接口摘要:
+ D! g8 X; ^: h  ?
% L$ z  _4 W- \: _* b- I/ H
            1; o% z( a1 T- d2 W$ C
            2
; F6 J+ t4 n# ~5 D) O            3
  V3 W: ]+ V5 v- f9 i* `7 J            4
1 L4 g0 b; [7 x0 X' k, t            52 x2 K: K6 u5 _
            
                        iteratoraggregate extends traversable {( |, |& @; u! v  I; x' \6 T
             ; u, s8 V& @5 `) _5 L1 z
            //获取外部迭代器6 G1 v% |+ K+ l' k/ F2 G
            abstract public traversable getiterator ( void )1 i) d/ q1 U7 v( N0 r0 D
            }5 F  K9 Y- g- i  z9 L8 x
            
9 t. N) {; _* @            
  getiterator是一个iterator或traversable接口的类的一个实例。如下获取外部迭代器实现迭代访问。
2 B! z' X0 u) I7 t  ?
; z/ z5 v7 P9 L' S. w) Z
            1( _. L+ T: C) K
            2" h& \; f, q: K5 D% Q- a7 W
            3- o8 v8 U+ v/ I, W8 z6 p- y0 _
            4
7 `) O% [) g+ ~            5( Q+ U0 o& J* \" W
            6
) z& t; Q( C% N  s            75 Y6 ]5 m7 n' D! L4 q1 O7 Z' v
            8/ G; T0 \8 T5 E; C1 c$ R# w
            9- {+ o8 q# g9 I2 F& q4 k
            103 r$ Q5 u7 x6 n7 M' a0 [
            115 Z' Y& P/ c  C7 r
            12
9 K$ n# D4 ^3 T            13
  S& J; t( \$ h- I) |            14
7 e8 j1 L. s2 S) A+ y5 C            15) E! C! G% {6 _7 H% Z# `' h
            16
/ j/ x% ^  X+ ^% u            172 L7 f# J' l8 a+ R5 v  p# {* C! B6 Q
            18
3 n2 O5 J  M9 L/ ?0 A. z2 d. U& R            19
" w  {4 }! D% X  ]1 j            20
4 z- O2 z! ]# Q  J4 R+ c            218 U! T8 {5 [1 f+ ~+ }+ d7 [+ d( c
            
                        class mydata implements iteratoraggregate {
9 d1 O/ Q: w& _  R            public $property1 = "public  property one" ;7 g% [: j/ q& \: |! e1 [* X; J, J$ n
            public $property2 = "public  property two" ;) H0 u6 z" P' @
            public $property3 = "public  property three" ;" o# \1 p, z4 p5 g
            
0 E0 }7 V! I0 L" s            public function __construct () {7 }6 n' H0 s6 O* ~3 x1 h
            $this -> property4 = "last property" ;; G4 ]/ S' T: y& h% I
            }+ X! R+ s/ f  i5 l4 \' ]
               w5 x  b/ u1 s. j' P3 x# n" W3 \
            
* j) V7 {7 |9 s. R+ a$ s' p' T            public function getiterator () {" s+ K: I) \/ w, S  q
            return new arrayiterator ( $this );
4 T" b# ]5 z# h8 J            }
! n7 ], a- {: F: Q8 T8 D2 ]3 Z            }
' q4 d9 h' V6 X1 a& Z            
# n+ J) D; U& u            $obj =  new mydata ;
$ \8 x4 a; q9 M/ _            
) J5 c: Z8 G+ ]; i3 \            foreach( $obj as $key =>  $value ) {0 a9 A0 L( d& R; {% z$ u
            var_dump ( $key , $value );
7 N6 j3 s1 H: v) u1 D+ H            echo "\n" ;
# W# B  I* N2 w& i7 b* f( e, F3 k            }( g2 u1 F' h, W: S9 @  [
            6 Z$ W0 w  y2 a$ \
            
  4.arrayaccess数组式访问接口
3 W4 I0 m; j3 i/ p! ~4 C: e3 o  接口摘要:. |$ T( k2 E7 e
  ?/ x6 ~7 ~) J: {; t8 ?( M' C' @
            1
/ R' ^' q& f' D, P0 m            2
1 z: ~1 i* {! {! X" @! C* i            3
) n& L( n! p9 M" P5 D1 T9 z            4
) ^' |1 d& {) }6 K8 s5 b            51 f6 y$ x3 H9 w0 ?
            64 n# |! c( ^8 W, d, o
            7
* j+ q+ h8 P  x' {( J            
                        arrayaccess {" Y0 R2 t0 `, _2 @& Z1 x4 d
            /* 方法 */
" N' |, F" e( }  o& P) h7 Z            abstract public boolean offsetexists ( mixed $offset ) //检查偏移位置是否存在
" j* O! t- Q5 X, m3 {            abstract public mixed offsetget ( mixed $offset ) //获取一个偏移位置的值
+ W8 o- M- s* k8 H* g3 h            abstract public void offsetset ( mixed $offset , mixed $value  ) //设置一个偏移位置的值
+ X2 T! P" u, r' G. C            abstract public void offsetunset ( mixed $offset ) //复位一个偏移位置的值9 g+ C+ I0 D/ q) q& s" L; @
            }& r2 Y, }" T0 ~4 a+ T
            & R! ?$ a0 L- ]/ d! h' S7 r  u
            
  如下可像访问数组一样访问对象:/ u2 v/ A+ T( L. C' D- e1 ]& }
  ?
: d2 F- z3 m* _6 v  q
            1
2 j. j$ J* W! Q6 e- |$ E) j9 f4 ]- A            2
' l$ Q% W, f3 M$ \% {- q            3
/ T- I% r  ~) V  N# s2 a            4
( c  d& M$ y2 k8 Z; C- |& Q6 R6 x            5  _* U$ `+ u, o! ]3 ^# D4 P
            6! r  S$ N$ ?& P/ H$ r0 w
            76 d% w) X; a. |6 ~: p- L/ ^
            8  ?$ \0 [% ^, ^( p5 s
            9
% C/ g5 B3 h3 A* M$ T1 m) q            10" T- d- S# G8 h: g
            11
- h% v  [' X3 ^5 M+ R/ D            129 h" c2 t7 o8 ~+ @3 v8 i1 O
            13
. {, p5 P4 f0 N- L4 c5 _& w4 M! E# ^            14. v; \" a/ z1 J9 {/ L$ s2 J
            15
9 s5 H6 _. X( ]6 O/ P0 }            16& H, _" o5 ^: w" l  m% d! i5 Y% a
            170 ^* B% [& M& k: d& B; y% z3 J) Z
            18
7 \& r+ J" m, D+ Q            19
* k0 S6 x9 L9 X( l/ F+ h. a. `            20
' u( C) I$ j! N% c7 u" W            217 N4 ]- x4 @0 r5 Q* q1 H% i- Z8 j5 N
            22
7 R8 a6 B. A4 C4 _, q) Y$ s. h2 |5 u            23  k% c. u/ @. R& ^6 c% h
            24
% S+ s1 ]7 u7 `            25& [) R) D  e3 u0 D" p: X
            26% s8 O+ C1 l. _  _- H! o  M
            27
; k* M! ^( a( J- h            28* t6 x/ y' D3 x6 F' e& ~+ p6 x
            29
! Q+ A9 H$ k# c% _; h% I" q            30
) ~6 m5 g- g  k( \            31  E* g' C1 Y2 |% r# \
            32
& C$ |' l2 R/ W3 _; J            339 R, W# u7 X: p) N2 j
            348 [4 n2 Q; k: x* z' [* g
            35
' F0 u8 }+ d" k4 V/ F: n9 `  M            36/ g1 d# W: W, h% x+ @7 Y
            37$ t* N0 V+ L' H& v0 O" Z, a
            38
( }  b4 H( q" G$ y/ q7 v" E            393 r" S" z0 F# z5 f, F( z
            
                        class obj  implements arrayaccess {
; M; [1 m6 }4 w, y% D            private $container = array();
) u' T8 G6 G- P. t8 i" L& B& ]            public function __construct () {+ G' S, @& Z3 O1 U$ a1 e6 _: K
            $this -> container = array(
) A/ r, w+ c, c2 Y& t: j* k            "one" => 1 ,5 I( V% }4 x6 E1 E3 B1 E, L
            "two" => 2 ,0 r: G+ Z1 m5 l6 D; @$ a
            "three" => 3 ,5 B/ F) D" s" Y4 h0 Q: l
            );% ?; x: G) H" _! ?' M
            }  g+ z( n" y& M: D
            public function offsetset ( $offset , $value ) {
) _2 r* v- I" W3 S            if ( is_null  ( $offset )) {7 Z: a, {- z: V+ R$ H
            $this -> container [] = $value ;% j& v- c" l. S, @2 Z
            } else {
# Y; _) H- ~# b2 ]8 K            $this -> container [ $offset ] = $value  ;+ t# `6 U0 ^. f3 O0 @
            }( e. L% p2 y* m  R& ~
            }
* B* q$ c* D- [, [( f4 A+ R0 e            public function offsetexists ( $offset ) {
, E/ i5 Y" Y! ?: t3 S/ z3 R            return isset( $this -> container [ $offset ]);
7 |( q5 {3 b+ a6 Q. v' X            }+ v6 p6 P/ G, T, ?) o2 x, Q
            public function offsetunset ( $offset ) {
+ w# \# V* H7 R# ~            unset( $this -> container [ $offset ]);& w( i* X* E" F0 y( f# N
            }
3 V6 O  v0 E0 [            public function offsetget ( $offset ) {
& Q: Q+ \% P7 A7 k; p            return isset( $this -> container [ $offset ]) ? $this  -> container [ $offset ] : null ;" e( F( z# t: o# ^  X1 Z# Q
            }
% {; d) `5 @) V$ S4 k! s- F            }- A* [" i: h1 y: Q4 X: a. B
            
' C: H3 A4 j  l+ _            $obj =  new obj ;: p5 R' K; Q5 k+ ?
            
5 e5 S3 h* S& A            var_dump (isset( $obj [ "two" ]));
6 I1 V/ N3 Y/ ^+ v            var_dump ( $obj [ "two" ]);4 R- k# n* p# E; A! p! G
            unset( $obj  [ "two" ]);
9 F5 n9 I: h0 }1 q' v. q3 F) b            var_dump (isset( $obj [ "two" ]));
& v+ a6 R5 @1 e; r$ t            $obj [  "two" ] = "a value"  ;4 }- I% J  |: |) Q  U( j3 ^
            var_dump ( $obj [ "two" ]);
4 l: v+ ~4 Y/ W3 M, l3 x8 ~            $obj [] =  'append 1' ;
+ N  K7 R- v! R+ Y- `# A! N- w            $obj [] =  'append 2' ;
! z6 A" K: V4 [' L  L# _3 @            $obj [] =  'append 3' ;+ L* b8 a& \. V4 L
            print_r ( $obj  );4 I* O( q# ]# P! r9 C5 ^
            
- x" h0 E5 M$ D( {            
  5.serializable序列化接口9 G7 e) x! I$ d4 f$ x# C8 j
  接口摘要:$ E1 f3 [0 d; n% M+ f! x& t3 D
  ?  L% {, e% K5 r- H# G# K
            1
6 N& h) z3 a0 U9 t" H/ X            26 z& f- o5 V$ w- E
            3, m5 ~1 l/ Y% u) q6 Y1 r9 G( ]
            4
0 \' x& F8 B% b: J7 q; J# k            52 t% ]  R; V7 ^7 e- ]
            68 s( y; x  Z& s6 v
            
                        serializable {
% m! q4 K8 d* E* L  r            
5 m. E3 p9 D$ q  V6 w            /* 方法 */( L( t! N% m4 m3 O- g
            abstract public string serialize ( void ) //对象的字符串表示- R6 x# o& F  _  A2 U0 C
            abstract public mixed unserialize ( string $serialized ) // 构造对象2 {, N8 a+ @8 W3 D
            }9 K5 w- v9 t; F  `
            ! N9 ^# T1 |4 c* H$ U3 x
            
  实现该接口的类不再支持__sleep()和__wakeup()。使用很简单,只要序列化对象时serialize方法会被调用,当反序列化时,unserialize方法被调用。
7 }2 p6 ~  O  M  ?
5 z4 I% H9 b; e# W. H3 |3 q4 v
            1
0 r" w$ ~4 @9 t$ A! j8 Y            2
# C* S' u7 m. |# r- }  S            3- h% g# H/ _- F( [
            4( l7 B1 W9 A: t* t
            5# T9 F9 D. U" c
            6( |; R4 D0 R9 h3 l! g* G
            72 j: J2 Y' c1 A' b5 g, I0 s+ w. i
            88 n6 x! ]3 j, Q6 q! w, }
            9
# ^6 P' u4 Z' o: p. y8 i* u; y            103 f2 ?. f% c$ u  Z7 S/ c2 [
            11
6 [/ q( {- |9 {: g' H            12
+ D- Q* a. U+ l, ^, V( Y& v( T            13
0 O3 s. {" G3 X: c8 d4 H: i            14
% u# E% x' _7 J% M            15
( [5 D2 u/ i( L            160 o8 y3 [% f' Q, D1 O( C
            17
8 \* j( U8 I* @% `8 [; [/ i            18) B* Z! A7 D: J& _" H: }' l: ~
            19+ J& s0 b2 Q1 I! p7 ~
            20: O" @' r$ O4 x
            21
+ [; a0 H1 H5 g- e- P            
                        class obj  implements serializable {+ ^5 d/ y8 J8 c. v, j* d* B/ Q
            private $data ;
' w  [- L! z& f, f( X5 j5 Y            public function __construct () {$ J4 @- t6 L% w: t! i. k
            $this -> data = "my private data" ;6 g# u1 i  B  h/ a
            }
% q# d; G- u' n            public function serialize () {
% O6 V% Q3 H5 x% I" d' v- z- `: b            return serialize ( $this -> data );
! A: a! n) x* E. q" J! t4 p            }# f: J# T: a' O$ u
            public function unserialize ( $data ) {9 x' T8 X+ M  q2 x) S3 S9 Y
            $this -> data = unserialize ( $data );* E* M! t' r4 `8 R# E: q
            }! V( r% T5 D) |  M! P$ _& a7 _+ P
            public function getdata () {7 F* M, e. ?+ H
            return $this -> data ;* t/ u' P: j+ v* Z
            }$ D) m0 B) v. s7 \7 ?5 X; R" K
            }
+ |: ]& d4 e. `5 x1 S             & f& H' j3 _1 ~+ i$ S. Y
            $obj =  new obj ;
! j5 `4 b3 j4 ^( N8 \3 g: B/ J            $ser =  serialize ( $obj );( k: a; G  t  I/ i! G
            print_r($ser);
- ?' u4 S9 }1 L( l0 N! b; J            $newobj =  unserialize ( $ser );+ I4 y% U  U: n* Z
            print_r($newobj);
; c# w% V  [! R* A            8 N' q9 @0 I1 t8 Q6 Z. p
            
  6.closure: N9 y* k, ^- [& s
  接口摘要:
' [. i% V: ?/ C0 G( W  ?
. Z1 k% J  t) [3 c' [. T
            1
4 V+ A: ]3 u- q            23 a( h1 E5 ^4 Z  l  f6 t
            3; I4 E+ F' ^# \5 Y1 D8 _/ T
            4% }( Y5 F. E$ t( m/ E! \" ^. p( e
            5% u+ J- E6 C+ q  ^
            6. p* x. X# s5 U5 u6 n( C
            
                        closure {' T8 X) ^3 e. L% f
            /* 方法 */
5 |* n- K- j8 O            __construct ( void ) //用于禁止实例化的构造函数
/ @+ g5 }( H( g3 d2 b            public static closure bind ( closure $closure , object $newthis [, mixed $newscope = 'static' ] ) //复制一个闭包,绑定指定的$this对象和类作用域。
4 W1 n" W- f) {- [, y            public closure bindto ( object $newthis [, mixed $newscope = 'static' ] ) //复制当前闭包对象,绑定指定的$this对象和类作用域。) P6 x$ G! u$ I
            }
( K& N  I  w" A6 X! p$ ]            % i9 U: ?! Q( t# ?& b, t9 _5 D- a
            
  ?% V( Z0 }  `. j- c% o
            13 r. Q( j8 B9 k$ {/ l3 ^; o3 d
            2
* ?9 I! ^1 ?" n/ w7 }# v            3" e3 t' N2 S/ w9 X% ?% z; M8 b
            4" W! |& R! g9 F' k
            5
3 ~6 F  L0 g2 ?$ N* o            6/ s" ^% w- p% p. w$ T
            7
# b/ f3 z5 t9 w- j            8
1 s1 ~1 P0 e) a            9, @: O+ q, c8 v$ j2 d2 g9 I
            10
# [; P9 `  f, R/ u9 n8 `! z            11
4 _; M1 i3 A* [! j            12
' D0 Q9 K' V; e9 g* H" q            131 M1 V% r5 l; G4 A3 G) j
            14
) x9 f2 ^( [$ f- D* @7 u, S            15% p3 }: e7 B+ M( u( z
            
                        class a {8 o" B( f! G7 M+ ]; J. ]% X
            private static $sfoo = 1 ;7 J; |' M+ v3 i9 A
            private $ifoo = 2 ;
1 N: K' Z8 b5 X/ B% L/ ]; D, L            }: p, ~% K( ~2 A4 Q3 j: Y
            $cl1 = static function() {
0 z& r- q8 a- N" p            return a :: $sfoo ;3 J1 o" W( s, B1 c) h& a# g
            };4 o+ U& X6 U0 y8 Z, C
            $cl2 = function() {
' v. ~# K; ?/ `9 ~            return $this -> ifoo ;$ K6 l9 D) Y# e. q8 D( w' A
            };
' E! t5 i2 q3 j9 Y            
4 j6 Z0 ~7 t' {            $bcl1 = closure :: bind ( $cl1 , null , 'a'  );
! U3 O1 [% `9 w. {: Y3 |1 b  B- O            $bcl2 = closure :: bind ( $cl2 , new a (), 'a' );/ C" r1 z/ U9 Z1 F3 E5 _% L
            echo $bcl1 (),  "\n" ;2 M/ \4 g- P- @8 |, o8 e
            echo $bcl2 (),  "\n" ;' T) a+ f# Z  K( [0 g5 M
            6 P6 r' s: n( ?) ~" @, B
            
更多网络编程信息请查看: 网络编程

回复|共 9 个

wwdu926a 发表于 2015-11-7 18:05:32|江苏 | 查看全部
楼上的话等于没说~~~
seazvyt 发表于 2015-11-7 18:05:44|INNA | 查看全部
真的 好久都没有这么笑了~ 好开心哦
buingeEvineus 发表于 2015-11-7 18:06:02|INNA | 查看全部
哈 你逗逗他啊
GoodyFouppy 发表于 2015-11-7 18:06:32|巴西 | 查看全部
我率天兵天将 将你打回原形~~~
Acropozelan 发表于 2015-11-7 18:06:53|广东 | 查看全部
我是来收集资料滴...
seazvyt 发表于 2016-1-15 19:42:14|北美地区 | 查看全部
嘿嘿...没事我才不骂人呢...
seazvyt 发表于 2016-1-15 19:42:20|山东 | 查看全部
哈哈 我支持你
mwxny 发表于 2016-1-15 19:43:19|美国 | 查看全部
先踹你一脚再说~~~~~~
wwdu926a 发表于 2016-1-15 19:43:41|非洲 | 查看全部
(⊙o⊙)…好长啊,我虽然回复不了那么多字,但十五字还是有的。

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

得知互动是一个融创意、设计、开发、营销、生活、互联网于一体的专业交流分享平台。
Copyright © 2026 得知互动-专注Ai与站长技术交流社区-Ai交流平台 版权所有 All Rights Reserved. Powered by Discuz! X5.0 鄂ICP备15006301号-5|鄂公网安备 42018502006730号
关灯 在本版发帖 扫一扫添加QQ客服 返回顶部
快速回复 返回顶部 返回列表