关灯
开启左侧

[研究发现] php中预定义的6种接口介绍

[复制链接]
swmozowtfl 发表于 2015-7-28 11:32:32 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
  这篇文章主要介绍了php中预定义的6种接口介绍,本文讲解了traversable、iterator、iteratoraggregate、arrayaccess、serializable、closure,需要的朋友可以参考下
2 X. B( L' G* ]9 p! A  php预定义了6个接口介绍如下:) ?* J6 [0 q+ o' d3 G3 H
  1.traversable遍历接口+ n2 D4 a4 r  r8 O. {- B' v: T2 u
  呵呵!其实它不是一个在php中可以使用的接口,内部类才可使用,它有一个用途就是检测一个类是否可以遍历。# I  b4 B5 h6 I8 k: f1 u
  ?
  R2 a" u5 e0 ?6 c
            1, B8 l& S& y: ^1 y, u8 Z: @6 E
            2% V+ I1 @7 d& d
            3, j/ b; h" K: _3 p( M* w% l0 o( Y
            
                        if($class instanceof traversable) {: @& O! U1 a& S$ q, Z
            //foreach# i1 c4 M2 J$ E2 C, `* \
            }
( v$ C& ]# g3 M( Z6 `6 ?! Q) K            9 p- _- i* C% ^
            
  2.iterator迭代器接口( V& U* l1 I: n$ U, v5 K. p
  接口摘要:
: M' j- y; X" p, ]) F* N  ?
4 {3 _* n+ B7 j& m: V$ c3 M
            1
! d4 X' I/ Q' j" N6 [# B& p            2* g. g2 @0 c  ]% X
            31 Y2 v8 d6 x+ r( M3 V
            4
* D$ m0 U5 ~# U) s            57 i" e6 f5 z; N( b  `% U
            65 f9 K5 o* z- T1 w* e1 `
            7
4 P) F) a. W3 Q" G1 a1 W) H            8# N- {' x$ F# I5 d
            98 d$ b7 L% o4 C/ G
            108 o2 ^, x* Z; o' r4 d
            11' ]/ A: w- P9 B3 E1 k$ Z
            12
% O5 \2 Y6 U# u3 K+ r# |2 T/ q            13
9 @8 j# C1 }) X! |            
                        iterator extends traversable5 d2 ?0 |- Q9 |, m" d8 \+ S
            {
: d( D  ?- v# g+ [5 k; ?            //返回当前索引游标指向的元素1 x# k) ^: M& E- f4 C
            abstract public mixed current(void)
! c  q, m# l0 e4 k) u            //返回当前索引游标指向的元素的键名- h: Y  D& I8 L3 R% P$ `3 U
            abstract public scalar key(void)
: Q4 [3 E( q- c. C( W            //移动当前索引游标指向下一元素; S" @! ]2 r  h' g. |- X+ D( F# ^
            abstract public void next(void)
' w. \6 v* j2 s$ w- `- |$ M7 }# Y% b            //重置索引游标的指向第一个元素8 N& ^/ L4 A9 u
            abstract public void rewind(void)
4 Q/ M1 s: @% V8 J( a  k            //判断当前索引游标指向的是否是一个元素,常常在调用 rewind()或  next()使用5 F5 h. H8 I0 e# T! y
            abstract public boolean valid(void)
% d$ a/ N5 |' B1 Y            }
9 g  p0 _. P0 s* ]: n            
* s5 K% o& X' E, m6 R; v$ e            
  以上可以让一个类实现一个基本的迭代功能,如下可以看到迭代的调用顺序:
7 O  Y5 Q8 o8 n' e6 Q  ?
; y3 g$ ?0 x$ t$ R, T
            1: H3 N" l/ d! m" X8 P2 F
            2
9 Z# a  k) c* E3 ?3 W" b4 Y* Q            3
* c5 n) }2 c8 |) h" f6 y* w            4
5 n# {' [9 x, _" c7 b            5& o2 n$ `5 a' `2 G4 g
            6: ?, H' O$ g3 W& m" i3 h
            7& J& U, A/ b# o4 o8 V* x5 h
            8
: w  {& T, L% S- I% }" o            9/ m0 h: \$ `& T/ c& }1 ~
            10
% L; ^+ E* H( w: ~" z            11
: ~* q. f  a, n            12
7 ^! x, q* R$ [% z) W$ V5 v            132 y# D6 O  X' q* W) a1 F7 y# I& b
            14  j# K! y; L8 P! C: B0 O: j% X$ G$ v
            15% v5 G0 ]3 X* L' B0 x5 [
            16; m+ r( `: b2 l3 ]
            173 h$ R" i  _; c$ T6 i! N! v, @
            18
* c0 Y* I8 i2 ~' f5 p            19
3 N, @% p8 j8 M( S1 `9 B' Q  A% {            20; w/ F' ~0 }' f7 R& R
            21/ T/ |, C/ Q  A1 v2 E# L9 b
            22* [' C0 \9 E( J5 n- N) x
            23
  V: O: D& D; R' _- T            246 D* |, b7 g2 u" w, ^  M) r
            25
) ^$ Q" J% d' N0 H) o2 c4 _. v            26+ K/ r/ h* Y% N# R# s# X/ `; [
            27
. f: |$ J9 D0 R' o            28
  X/ H& r8 a1 N7 P            29) R% e, ?! Y! K2 V% o7 l2 O" B% \
            302 M& W$ ?3 C' C/ Z$ F/ r+ @% p
            319 o6 R! U/ h% a0 `
            32
. W5 A! R: w# k  Y$ r9 w, D* C            33
8 P& m! E& l* p            34& G, X) O8 g5 n2 T
            35* `8 b) y& f+ E
            36
$ |6 l$ }2 f  i/ \9 s1 d            37
. [6 T- y' p2 |. U7 f! f            38( y4 [. }# q  N8 q" |( U
            395 m$ m: J4 Q( f2 s4 p
            40
' b7 y6 W( {+ p8 u. S            41
! A0 e" D$ Z' Q" a            42
$ t$ G& Q5 M: v) V# b# i3 Q            43
! |' @( Z9 k4 y& U+ }: ]4 X4 B            446 _" a% s: z4 K$ p
            
                        class myiterator implements iterator {
* b; i) H( P# z! v, g/ V' f0 T0 ?! u. M            private $position = 0 ;
$ `1 S" P. c6 t- @9 `            private $array = array(7 y) ?: Q8 a, j+ o3 z! c
            "firstelement" ,$ I8 y( T6 @9 x; _
            "secondelement" ,  v6 r; u) L9 r) U+ `  `% V- a) g
            "lastelement" ,* k# V, I. a1 ~3 G+ {- H
            );
" ~0 z! L! p8 I            
7 M! w) m# N" ^            public function __construct () {1 ~9 c  }& X7 A
            $this -> position = 0 ;
2 I# s( ~8 x9 C' A8 h1 h( c+ P0 X            }
0 y0 y% E2 E& I; y7 y8 k            
  k' n: j2 S" M7 O7 [  x            function rewind () {  a" x% n6 |0 ^7 W& r
            var_dump ( __method__ );
) b# u3 f/ E, j' @            $this -> position = 0 ;. g5 s8 G0 M) d/ c# O  ^1 H
            }
/ u! m  t+ q8 w: [- f4 m! I             0 b8 n" r3 Y* C( z. l8 l1 h
            function current () {5 b) ~5 H9 f/ R) Y
            var_dump ( __method__ );$ ]  {9 n* Z* O* P. \! e% X
            return $this -> array [ $this -> position ];
! D5 o. z  j6 O% V: x: B5 V$ q            }4 i8 J, f2 K) R; O) o! i# u/ c* `
            
- z8 ^/ y" h8 v: }            function key () {, T9 Y8 B  j) ^' H# W
            var_dump ( __method__ );/ u& m4 W, S6 d$ \6 M1 s
            return $this -> position ;
% t; T( `% E, r: Z# H6 X            }6 d! R$ m' ^) O, S( t: s+ Q
             ' r/ h$ _' Y* Y! u' p' w
            function next () {6 H8 A# s8 _5 m1 h: i9 i
            var_dump ( __method__ );
/ K0 g, b; i3 U' F+ u            ++ $this -> position ;6 s& V3 K! B9 O. M% l
            }
6 ^6 ]. g+ v+ h0 U( |            
6 i# f$ s4 S% }% w( W0 |: e" n# |            function valid () {
% [) V  g  q3 V9 M% ?9 Z            var_dump ( __method__ );. s, f  ?- `# u5 G4 A2 I1 j; A
            return isset( $this -> array  [ $this -> position ]);
1 {0 k4 L; v7 v& w+ O& K" r; Y            }
$ @( t5 H7 P( {5 {            }9 z- ?; E, t* k6 _" j+ _+ a: L
             2 X! R' i, b7 M8 F
            $it =  new myiterator ;
' l2 D/ P9 G8 t1 J             ! ^0 i* U# O+ A) T
            foreach( $it as $key =>  $value ) {
5 M' q, [  i8 M            var_dump ( $key , $value );( a/ ]% l6 B+ {
            echo "\n" ;+ ^0 h% ^) w) ~6 s$ j
            }
7 V  z5 Y" e7 o" ~0 f4 v( A            . u/ I% d5 M- T, n6 Y
            
  3.iteratoraggregate聚合式迭代器接口
. C! l+ _) @- _, q! X" f7 B: L  接口摘要:
& F3 j0 D+ E- E  ?
1 f1 w* F2 w8 l$ i- T
            1
! h& s2 K1 H7 t; P6 M. y            2
! B0 s( a) A+ A( }# s+ E0 ^( [* ^            3
- a. D% k5 R7 ?$ r' b3 q8 w" G            47 r( _9 B+ y& ]. l
            5
5 f  N5 A3 r+ \, Z1 h2 c$ L2 w, f5 O            
                        iteratoraggregate extends traversable {+ m/ z' C+ n0 I
            
  o' G) @& W  u$ G            //获取外部迭代器$ ?  p! P0 |. h2 `. R. W0 ~
            abstract public traversable getiterator ( void )
" ^/ A& G- E. R            }- Y% f' z& A5 V% J8 |. ^* V% a' R1 t) Z
            
' X4 R% i1 s3 G4 S2 Z1 A' ?4 @$ R            
  getiterator是一个iterator或traversable接口的类的一个实例。如下获取外部迭代器实现迭代访问。: e0 x+ V1 W8 n% K- Z' k5 ^
  ?
3 n  [- {8 y( P% j( M* [! ]
            1
; M& q+ N* A6 Z, B+ ], Q3 T            2( Y/ ?: y! H/ ~7 \
            3
6 E. _  n: I9 v* s( k1 f0 R            4
% Q( X( B3 v7 M9 }  Y, h            52 l) a7 v3 X' m$ U
            6
# P8 u8 ^1 `2 X' O/ Q            7
8 B" ~. Z2 s" V' }$ n. G            8+ z' i' m. P8 S& T5 b
            90 H! _# {2 p) ?* O7 K1 g3 Q) o) N
            10. D0 ~9 d: v: D& k/ O: {2 E( {1 d
            11
0 ~( x" D% [0 U2 [' J/ P1 ^            12
1 K: j: f0 V; B$ l* L- C* V- T! @* ^            13+ i6 C. X" B) M
            14& {, q$ F0 z+ e: R
            15
9 I' d$ c: P( j* h6 x" z5 p            16: \5 s6 C; ?: g' p
            17
# E5 p( w$ z$ q            18
) u( Z$ j. X3 @            19
. \' q. D- u& C            20' O: R9 f2 a; i1 H, B
            21
7 y, l+ [7 }4 k/ e! x            
                        class mydata implements iteratoraggregate {( _! R/ B, @. \
            public $property1 = "public  property one" ;
8 R3 H) o3 V  u: ]7 C9 O            public $property2 = "public  property two" ;
: [8 b4 q( h+ `; t            public $property3 = "public  property three" ;" \' h8 e9 s+ R: j' v- o
            
4 _  W& M4 z: l2 ?2 [            public function __construct () {
5 y, n% u3 F( a& M: k            $this -> property4 = "last property" ;
0 ~* L$ Q8 ~  r! ?            }7 Q+ V/ X( M3 C- c
            
& r" l* C* `+ f+ Q* c/ c) N4 o             - k! M" I+ q$ l9 k. z) Q
            public function getiterator () {* e5 a$ t' C6 h* M. Z; ~
            return new arrayiterator ( $this );
/ ]" c& u  [* x0 z+ |3 ]/ Q            }
  g, z6 C/ D. |& _3 v1 H5 e: f            }
- `$ F# \) c, Z  j' `            
; a; m' A/ C7 r1 e7 s4 J            $obj =  new mydata ;- Z# k0 B* Y/ u: E6 `" W
             * |6 Q8 }- h( `+ ]( r% V( y4 \
            foreach( $obj as $key =>  $value ) {
: V+ @+ x+ c% |9 }1 m3 Q1 s: Q; B            var_dump ( $key , $value );+ `! f$ n3 Q' C' G: u( ~5 S; D3 g4 k
            echo "\n" ;3 e5 V/ J6 v/ ^2 E( m
            }
, v2 B8 j; [+ N6 l& s/ p' J; L            . B( e4 q8 }( `, q2 n
            
  4.arrayaccess数组式访问接口: q0 T  ^; J6 q8 b# ^7 Y  X
  接口摘要:: B7 g$ h% H& s
  ?4 U6 x, H$ f' @6 G& i2 `
            12 ^/ w" B" {( c, b3 h- }9 `
            28 o  ]# }; s  x% g4 ^
            3$ Z0 J5 Z+ w' Y3 S! r5 V
            4$ I! Z: ?3 N/ @3 M
            5
% J& y/ S, V: o# f0 g) C$ m: v$ ^            6
9 @+ n2 W* q9 U1 [& L2 Z; s2 ~            7: \0 G: h, ]; Q! ~/ I
            
                        arrayaccess {% U" t2 E5 y3 `# k
            /* 方法 */
9 J/ R* V- K, h/ f" c2 S. b* O! ~8 j            abstract public boolean offsetexists ( mixed $offset ) //检查偏移位置是否存在
) O3 W' s  h" B  _& m) Z' R1 |! \2 ?            abstract public mixed offsetget ( mixed $offset ) //获取一个偏移位置的值# h: [% v% w  e5 ^, w
            abstract public void offsetset ( mixed $offset , mixed $value  ) //设置一个偏移位置的值% s& J/ f3 k1 {/ R2 u
            abstract public void offsetunset ( mixed $offset ) //复位一个偏移位置的值: x) b: ~1 h9 v2 q3 d0 L9 e& w
            }
$ Q; G9 X9 o0 {8 f# _            & F2 x" t1 K% ~! {7 N
            
  如下可像访问数组一样访问对象:
6 }6 V0 R1 E; s4 S5 f$ o  ?& F# \# |( c0 o: T; _+ Z- D
            1
+ u$ r" J  |( F; m3 d2 V: q            22 a- N- O3 B, v
            3
( M& C+ a% z; R            44 |- }. _4 B0 [+ u
            5$ _: D0 z6 ~1 r& d3 ?. U: f* d3 F& C
            6
) ^% V$ }( n/ n& K4 c3 W5 B/ P) q            7
, d6 T7 p9 I: m* H8 g8 E            8+ z, M2 p' E5 j- w3 M) {, M' ^
            9
, q! W& C5 S& s) z4 {            10
  B% t/ M9 h6 w- W7 j5 k            11
3 T/ |1 v# q9 y; r% W" i            12. i, E9 I4 @. I+ W$ s% h
            13! o' @5 X. u& ~4 C1 Q  I. Z
            14' p- Z, U" P) c
            15
. t' W$ i) [$ q            16
9 m/ B8 v: }: k6 Q- I8 O* n            17! f1 }1 Q: V7 A0 v6 d1 }9 D) p
            18
2 q! _$ j2 u2 l% m7 [% }            19
  ?5 M. `2 J" q, Q' g3 u% `( X; X            20
( i/ x+ f4 F8 P1 {+ G: U( x8 D6 k            21
" D: e+ s9 x; w0 y, e$ H            22
& A5 W4 _( f9 o4 W            23; r- _* Y% I0 }: V$ c4 _
            24# U( q; A9 P& I  i9 t5 h' R1 Y! [
            25' c( y, b9 I9 N
            26
7 J4 e4 t' q& L3 G$ r' n( L. R2 b            27
# |2 a$ r" D! m" r            28+ N" D  X" s& P% \
            299 C; w! L1 `2 F
            30" C$ [% L$ R8 K5 Z. k
            312 j- {2 b4 }! s% H* L) `
            32& u4 A7 h( y/ M( _
            33: ~; e7 C/ j) D2 ^' P! {- F
            34
# _8 R6 r% h$ g            35$ x& M& L2 F/ f! K( o/ h8 W
            366 U8 W" `# m' o1 C/ G. F% q
            37
- L5 K7 |  e2 p            38& r& C$ g% R- m" I% k& m/ U1 N" f
            39. `# P+ \3 _1 y  v: _4 ]
            
                        class obj  implements arrayaccess {* b' O: A$ j3 q' k6 [# j
            private $container = array();
: h5 h9 b: f8 `2 _            public function __construct () {8 \( v$ n4 C% U7 c/ u7 K! j
            $this -> container = array(7 J# Y: ^( [/ a' S- u* A7 P; f
            "one" => 1 ,
+ ]. A) k* C0 f" b  d& M            "two" => 2 ,% b. p4 M4 Q$ G4 t' ]& i+ M9 i% l
            "three" => 3 ,
- B. W- ^: B& Z- B) E* I( R            );0 F' A+ Q/ F' M$ B- Y, A
            }
) U1 ]; C5 `! Z+ Q4 ~            public function offsetset ( $offset , $value ) {
4 A6 c: M; [! \" [            if ( is_null  ( $offset )) {% H! R' V3 ?9 O% n0 v' p' f$ j
            $this -> container [] = $value ;
' \$ K- K; W' H/ v: Q8 p! A            } else {4 y% @6 M- S* ?% |
            $this -> container [ $offset ] = $value  ;
2 D. R& _! o2 u5 e3 g0 X& _            }0 q8 t! P! g: J" k
            }2 c8 ]3 B" l  p) N8 M9 q/ w  Q
            public function offsetexists ( $offset ) {, v4 G  s$ g0 I  r& ]$ h( t
            return isset( $this -> container [ $offset ]);
' a+ Q3 @" |/ T            }
  @& \/ X8 H! {$ w# u8 f- Z7 c            public function offsetunset ( $offset ) {
" O  {0 S  D( Q4 f5 a            unset( $this -> container [ $offset ]);  g8 q6 I+ v4 Z2 S( Q6 [
            }. E% w1 M5 Z) }* n- A) H$ e- h, {& f' j
            public function offsetget ( $offset ) {+ Y. N# m$ Q. K! X* k
            return isset( $this -> container [ $offset ]) ? $this  -> container [ $offset ] : null ;
- R  H% \6 d# T            }% p) D+ r2 ]+ O8 m0 N. [2 W
            }
* f, U- ?" f9 E3 }- ?3 e! w- M' R             + f; w7 K% W6 a) R$ L! i
            $obj =  new obj ;) A- {5 {9 M8 x, N9 Y# i
            
5 p1 T% h6 j2 }/ a5 i1 N& B            var_dump (isset( $obj [ "two" ]));
+ U: J" w2 C  s( h( z5 |8 a            var_dump ( $obj [ "two" ]);* V  C5 y, ?( v" k0 ^/ G) d$ q
            unset( $obj  [ "two" ]);
) g1 Z3 b+ i! U/ q# s2 J' L$ s; V* I7 a            var_dump (isset( $obj [ "two" ]));+ P: H9 C& N+ h' d5 c, L2 E
            $obj [  "two" ] = "a value"  ;! s1 e9 N% ^1 E( t2 W/ j3 I# c
            var_dump ( $obj [ "two" ]);6 T4 F) K" l  @  l, w
            $obj [] =  'append 1' ;
/ g" ^2 A$ W4 g! f$ ~            $obj [] =  'append 2' ;
: ~2 Y3 ?- Z+ V3 O            $obj [] =  'append 3' ;
7 Q- B! ]5 |$ o7 A/ Q            print_r ( $obj  );% G' [! O; F: U. D
            
6 b* Q0 D$ M% G% D. |$ c/ e3 V1 U; J7 k            
  5.serializable序列化接口
; |) U3 }2 o0 R, g" l  接口摘要:1 e& C9 F6 u" u& R6 X! g
  ?! n$ r) Y# O( a) a, ]. `
            1
3 g& m, X3 q; I            2
; a8 b* C+ u% F8 x, d            3
1 u& B5 M* c; B3 s3 t* c            4. e. r1 c4 [  B9 ~
            5  y; ?% I0 Y" _8 v
            6
% \8 K' v0 b5 Z: k3 T2 \  V! j            
                        serializable {- e- R; ^$ b4 p" n4 C: ~9 g
             4 l1 g% b& \- _  k1 z
            /* 方法 */. F$ ]/ n* D- E7 d9 d
            abstract public string serialize ( void ) //对象的字符串表示
$ ^) r* X+ Y3 r2 q$ j" i% L            abstract public mixed unserialize ( string $serialized ) // 构造对象  x; b* M: L- I, m! C* `
            }
( [: n# e# K4 P. ^4 w6 d0 ~            , c* O' B* b# s: [2 g! ?9 x3 u
            
  实现该接口的类不再支持__sleep()和__wakeup()。使用很简单,只要序列化对象时serialize方法会被调用,当反序列化时,unserialize方法被调用。
, n, e" U  c) a% M0 J  L! f  ?% P( |5 i9 B9 L* |, D
            1% f, f) A7 V  k0 ]
            2
4 B7 u( E$ T$ l/ M/ R9 \- n            3& K# G. z) c. Q! T: a$ w4 f! u. p
            4$ H* |  H4 J8 V
            5
/ Z0 t# X5 S; w            6
" G7 b& N) ]& U            7
) u1 C! @9 z  F/ i. Q            8
# M5 N4 I3 G$ H* n( R            9& D$ I8 X, [" Y+ V7 @# F8 y
            103 h* B% X' G& M+ |  w  O* e: G- m
            11' X* A* W% t( H
            12
5 K' X, W. h+ _2 g+ a3 l; S            13
# a" j3 M5 n2 q9 Q/ N+ m# L            14; w- v, ^( B$ ]: w
            15
3 ]# k$ c+ _3 ^. ?            166 l. M; L7 G+ b- A  Y
            17+ u9 `4 {2 `4 D' v8 |( `
            18
: K8 }9 e  N+ @* ]$ a            19
# _5 E% l; j/ b& u3 V: z7 r            20
+ v$ y! f% F9 g5 |0 g$ X            210 l) K1 L: L0 Q# B6 L
            
                        class obj  implements serializable {1 q" v6 V/ v8 w$ n
            private $data ;
( }4 V- o8 U& |& U) P2 F$ S            public function __construct () {
$ ~# I0 Q) C# L% J4 V) ]( t( O4 b            $this -> data = "my private data" ;
% _8 Y' v7 ~( C0 i' F            }
5 `7 x. R+ M% G$ D5 Y4 D( u            public function serialize () {8 f* Y8 O  d0 L
            return serialize ( $this -> data );" b9 Z0 g( _$ J( I3 P6 w" f* e( s
            }
) C, L1 B' y1 q3 z( W% @            public function unserialize ( $data ) {
# l5 X' q5 k2 V) N* `            $this -> data = unserialize ( $data );
% N& y! n3 S2 K+ }1 z# s            }
$ {5 x: p% R/ w6 e1 h            public function getdata () {
( }/ A$ }& v: |; P            return $this -> data ;
* u; u! i+ k8 ^. B* B3 d6 z            }  L! h3 ], s8 l& X5 h! C, j
            }
5 K/ t5 |% p" e/ V             3 Y* h0 p, R% p2 Y
            $obj =  new obj ;
2 L# c- l) a& t/ E2 I& f            $ser =  serialize ( $obj );
) x( R' ^" a/ A4 d! z            print_r($ser);
% @7 ?* P9 d( a+ [            $newobj =  unserialize ( $ser );
7 [# a; [/ m& Y. [            print_r($newobj);1 @$ D3 e, [9 }; q
            , E" T' ]8 q& x% w3 D
            
  6.closure7 O0 d; g  w. S
  接口摘要:
; e% n0 g  s: w# Q7 i+ Q3 W  ?' k" E% C. j  h: n+ W! @
            1
8 v' F5 O0 j! M, _/ v+ ]; L            2
5 [& H6 K, a3 T; E% b2 c            3) E, ~0 N* @& H: O9 {5 w! M0 i
            4
/ I2 ?: A0 _- C2 x            5
3 ^5 z) L% c2 C% {+ D0 Z9 s- L% T            6
2 B/ T6 W% y6 m2 t& a+ I$ N            
                        closure {3 H) q1 s& q9 k8 s1 F2 |
            /* 方法 */
' n% `0 A$ U- Q1 K: Y$ S7 s6 c            __construct ( void ) //用于禁止实例化的构造函数
) q. d& ~$ B2 f8 X/ ^/ o$ a$ ]            public static closure bind ( closure $closure , object $newthis [, mixed $newscope = 'static' ] ) //复制一个闭包,绑定指定的$this对象和类作用域。
$ q+ L9 P3 @" U9 K+ S: Q3 E            public closure bindto ( object $newthis [, mixed $newscope = 'static' ] ) //复制当前闭包对象,绑定指定的$this对象和类作用域。" H" t8 M$ c6 B: [  h8 j
            }
! y! e/ A7 H5 v* y+ `            / ~3 c& v# \/ w+ Z- Y1 J
            
  ?
! Q2 _* d9 }+ T6 P- f
            1% f+ ?$ _  n! q4 T5 j$ S
            2
8 q: c9 Z, Y2 U5 n9 O' P# E            3
: Z6 i5 X6 ~& Q( J( ~+ J            4
2 |  K) p" `+ A& r            55 a4 t! `6 f* `! ]7 r7 v' u3 W1 `
            6  U$ g+ {! i* ?# m( `
            7
9 e! ]$ Y4 O" |9 J. f; f            8# A9 e: |# P5 y
            90 h  w# R6 P( G  j
            10
) X+ q1 _& Y7 ^- l$ e            11
6 ]8 }) x+ @/ ?* `: `5 D            121 v: y2 z& \5 w& l+ o4 o
            13
% o5 ?; a! `/ y3 j0 }; ]            14
3 T7 A7 v- |2 _6 e8 X8 Y4 \3 N            15# n/ b# _7 x' i3 N
            
                        class a {
% y6 c' a4 T3 i9 ]  u$ y            private static $sfoo = 1 ;6 P6 q/ ?, g6 f
            private $ifoo = 2 ;
  V8 F5 ^( J# I) Y1 `            }. p* W2 N, K: u! W+ {: u5 r
            $cl1 = static function() {' {" m4 V; A2 T3 C9 I) ?7 Z
            return a :: $sfoo ;5 r% X) n7 m% x& ?
            };/ l9 |8 p2 b4 g) _4 [) n5 I
            $cl2 = function() {# t; v9 I7 p4 r$ C7 e* \
            return $this -> ifoo ;
/ _" l: r9 e% L6 i) z            };+ e& Q& K# R9 \1 ^( m6 G) D
            
3 x6 m" r- Z2 V1 v2 p, Z            $bcl1 = closure :: bind ( $cl1 , null , 'a'  );
7 ?+ `; l9 I3 L" \7 R4 _            $bcl2 = closure :: bind ( $cl2 , new a (), 'a' );
" f4 i1 K# S) {* t: d4 m) A            echo $bcl1 (),  "\n" ;
$ _- P5 n( l  j1 `3 N- t            echo $bcl2 (),  "\n" ;
5 b- ?2 x, w9 O2 I! [: [( j            
" }( }$ O" p, j9 [5 R  G            
更多网络编程信息请查看: 网络编程
 

精彩评论9

正序浏览
wwdu926a 发表于 2015-11-7 18:05:32 | 显示全部楼层
 
楼上的话等于没说~~~
 
seazvyt 发表于 2015-11-7 18:05:44 | 显示全部楼层
 
真的 好久都没有这么笑了~ 好开心哦
 
buingeEvineus 发表于 2015-11-7 18:06:02 | 显示全部楼层
 
哈 你逗逗他啊
 
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⊙)…好长啊,我虽然回复不了那么多字,但十五字还是有的。
 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


0关注

1粉丝

2503帖子

热门图文
热门帖子
排行榜
作者专栏

关注我们:微信订阅号

官方微信

APP下载

全国服务Q Q:

956130084

中国·湖北

Email:956130084@qq.com

Copyright   ©2015-2022  站长技术交流论坛|互联网技术交流平台Powered by©Discuz!技术支持:得知网络  

鄂公网安备 42018502006730号

  ( 鄂ICP备15006301号-5 )