返回列表 发新帖

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

575.1k 9
swmozowtfl 发表于 2015-7-28 11:32:32|湖北 | 查看全部 阅读模式
  这篇文章主要介绍了php中预定义的6种接口介绍,本文讲解了traversable、iterator、iteratoraggregate、arrayaccess、serializable、closure,需要的朋友可以参考下
4 n+ R- ~' k) D9 E0 H& [' l  php预定义了6个接口介绍如下:, I2 I' d$ G  D% n2 R) X3 @& Q% Q
  1.traversable遍历接口
7 `0 t. i) [. P: M0 G# h  呵呵!其实它不是一个在php中可以使用的接口,内部类才可使用,它有一个用途就是检测一个类是否可以遍历。' o; ?0 r9 s) g2 x3 R( B  V! [
  ?% c) ]. y; _. m
            1! ^" v3 o& M: o4 O. r7 Y# A
            2
4 u, P  w8 ^. W6 r2 m  q) y! q            3. A. M2 R5 K* O7 L( w4 ^% S4 F
            
                        if($class instanceof traversable) {
; d' }4 B1 k: h& h6 Y3 V' @; R            //foreach
# q+ \$ X3 v  Q, ^            }) B4 }1 O# ~9 y. ]
            
3 Y* _& }3 E2 o/ w" h            
  2.iterator迭代器接口- k. n3 w, h" @( g
  接口摘要:
% k7 H/ r8 P- H0 ~- Z  ?/ ^# n) ~* [* r" ]1 K4 v+ y
            19 o( h4 m7 F  d+ ~- \- C
            29 Y+ K" k2 I0 E  d0 a5 s, j
            3
) K9 ~, G* Y# r            46 s  v$ B0 d9 `; k6 C1 ]
            5+ V( j/ W. n; s& n$ L
            6
3 a- j1 w$ Y8 V) n( N  {            7
# |9 A0 m/ F/ j            8
( Z4 u# W& ]3 c1 X            9& n5 C( y* X! f  j% _
            108 }9 L6 J3 W- k6 D1 h# C1 \9 W+ _$ u
            11
  }+ f; Y8 p2 M6 D8 C  X            12: }4 u) g3 a: s' G4 s! x( L
            13( s  z- o6 \/ h, h# K2 n* C, h, z
            
                        iterator extends traversable6 x! N1 h7 j9 _- T- P$ F
            {) R5 `7 ?% i9 ?: w" r  ~* X
            //返回当前索引游标指向的元素8 S: i. e8 w5 ?2 j6 v' }
            abstract public mixed current(void)
- \7 a  C" y: l' a6 T  r+ e            //返回当前索引游标指向的元素的键名, i& D5 \/ l8 g% v4 _4 ~
            abstract public scalar key(void)
" W7 v, w$ a$ W. T2 o9 v6 ]            //移动当前索引游标指向下一元素  E, ~* _2 i- ^. J6 L) z5 C
            abstract public void next(void), M- z* w0 @( E1 h: s4 t
            //重置索引游标的指向第一个元素
3 q% I( U* t: ]: h. h/ D            abstract public void rewind(void)
9 |  f7 ]  B, v6 ]& Y& b* ^+ X            //判断当前索引游标指向的是否是一个元素,常常在调用 rewind()或  next()使用
1 K$ C+ b$ s$ e! H2 }! r            abstract public boolean valid(void)
2 H! \5 F' |9 i( b            }
: [8 u) U2 W; k  [- N' n            " ^1 I* d- r2 t. x5 g- [% l8 w! f
            
  以上可以让一个类实现一个基本的迭代功能,如下可以看到迭代的调用顺序:8 p& f! A: n* k! J2 _7 e8 _: f
  ?& J6 b; m' B$ l6 ^) C! \! Y
            1, r: `& @8 F; j7 b2 e$ t
            2  |! v( T9 f* X( Q" t) B
            3
+ O$ l+ \& v! C% ~) D: K) a' y1 E            41 s& p  B! ^5 [1 p* p6 S" J% q; K
            5
1 n" n$ U+ D% F& F            6
: {' R' n; Q& I/ K2 \0 w. k5 m& d            70 A* ^4 L) F0 |  d% T7 L* d
            8
; v* l- A" @; }. j            9
, d; W  q  ?% `% j            10
* [/ r; G& a# N  N! {1 |            11+ Y' \* }) _3 _
            126 `( p3 q  x9 z2 s% Q; B7 G
            133 J5 w+ D; e; S/ |
            148 x: t) L/ Q* s* Y4 M8 F% y% S
            15
1 ?* R, ]/ ^9 R6 G4 [            161 Q- w0 d/ D, X
            17
) f3 k: _) \& q7 F( A/ p: I            18
, w6 O' A5 \  }2 q) N! c, p4 |            19
2 ^* K# e2 y: n" T* @4 v            20
8 T% z/ i) d9 i' N1 ?  y            21
( h9 L5 P5 i; d' Z            22
. |% a# o$ T: ~9 v& d& x6 f9 P            23/ e1 l4 }  L. E0 T  A2 }. Q
            247 [9 o- a/ _1 J- T7 D# X
            25
0 r' ]! c4 [# Q" g8 l+ `            26! t/ _: s! W1 M1 ^
            27
- n& o( N4 @9 f0 [2 h( g            28
8 v% B# r6 B( v9 E7 T            29
  Y( [" n( @2 F) ?, F+ [  k' U& \            30
4 Y: j) [# O7 H8 n0 H0 d) a1 l; ~            31
2 i) a8 j3 p" T            32) g+ l( \1 Y/ Q( H" Z, I6 \
            33
: T8 a, ~; s$ e; }+ x1 L            34$ k9 z& j# i/ Y3 s- Z* _1 T
            35
5 [/ l5 K0 o! Q; T            36
/ L! O4 Z" n: Q9 H. I% Y            37
  o0 i7 e0 V! r9 w            38
; {! d* k, ?8 H' W+ p6 y6 {            39
8 Z) w1 N8 D6 b1 O            40
2 }- E( C8 Y+ [            41
1 T# w9 B; G# |# T! O5 S( b            423 {0 ~8 p* ~0 K! v# i* y- a
            43. J& `" X$ r, k6 U1 f! _: g8 w0 O
            44+ i) n. A$ J" m# W) e
            
                        class myiterator implements iterator {
# x" _* m6 p1 e            private $position = 0 ;
3 v& B  e+ D, e7 o            private $array = array(
* P* [& C5 p  r2 {" c            "firstelement" ,1 `  F" T3 Y/ V$ c
            "secondelement" ,4 B: A& F1 _+ t; K( H9 ~4 x" U
            "lastelement" ,) d+ ?; E) [- I3 ]1 t# D) R
            );+ d, o  C9 a& {
            
+ ?- u# n) ?/ N8 Q; H            public function __construct () {
+ \" T4 h  ]4 n9 U  [# N            $this -> position = 0 ;' Y- G, G: T- J$ ?" s/ ?* d3 {
            }, E1 Z/ p% X/ K% m# s
            
0 y% p. Z5 K# |( d. Y            function rewind () {
2 P5 z$ |  Q$ n2 b) ?! F            var_dump ( __method__ );2 `! S% k5 A! X
            $this -> position = 0 ;
$ W* c) f. K5 W  C/ v/ H            }
$ k1 d( j5 U) |5 q+ L  r2 F            
, M4 K$ N8 u: j9 o$ O5 t, }            function current () {! L- ]3 a2 {1 z/ I; J
            var_dump ( __method__ );
& k$ Y' `4 P& v6 k) {            return $this -> array [ $this -> position ];
8 G9 ^  D2 Z8 _# G+ L+ Y. w            }
% u, w& y- T5 e3 m; R             ) I$ G3 w7 |- ?1 o3 g2 T
            function key () {
1 m9 ^, [7 D4 @  A) M            var_dump ( __method__ );- _% B9 B) v/ p0 H; Q7 D" ]
            return $this -> position ;
' T; U$ ~( G3 ^) A7 I  W% {            }& f) h2 t$ K" v& V
             4 ]% s+ o; D" g, F4 o* ]
            function next () {, w1 h1 o* ^4 a3 J
            var_dump ( __method__ );% n$ S  k/ @3 X+ a$ v% `) ~
            ++ $this -> position ;
1 I" z: [) r, }  s, T: I3 j" B3 C            }. Y7 [( v" t4 ]4 X1 ~% k2 r
             - e# `5 e* n; p$ v1 _
            function valid () {
, z6 c6 @& h1 Y4 h' E            var_dump ( __method__ );
' E# |0 I5 f8 |+ S* I4 y            return isset( $this -> array  [ $this -> position ]);+ N" y4 \9 |& ]2 O* c! s$ y
            }7 K! V. y; d( P0 E) y
            }
7 V0 L( _5 w% q) l            
2 U1 n" R- f9 p& S            $it =  new myiterator ;* L' u3 t: X& R/ R) N
             - |! `3 {' @# C" w% R: b+ q& a4 ~
            foreach( $it as $key =>  $value ) {
+ i8 b  j& d6 H. d            var_dump ( $key , $value );* d8 F$ v2 W0 ?2 o+ S+ g# a3 y
            echo "\n" ;
$ A% |* {/ ^! C4 R1 O) x' \            }" c/ \7 K9 q7 C* J5 u
            
4 B9 z/ D1 @/ K0 n1 ~            
  3.iteratoraggregate聚合式迭代器接口/ f, ]0 m8 d5 T( B( u1 Z
  接口摘要:. p/ P2 H  i. D7 O! h7 c
  ?4 p) Z* J) N9 z' _% X* K
            1+ v. G( c1 l6 |3 H+ h
            2' Z9 t7 y/ @) h0 u
            3; ^6 T! G# `/ n6 z# k" Q( R
            4- v& g, R# D% ]1 R) ~
            5
% {3 ?3 S* ?6 M  Y: z8 X- c            
                        iteratoraggregate extends traversable {! m% I3 b9 b% j. Y- u/ x3 |
             - [( c4 G+ {) V% n
            //获取外部迭代器
4 ?* w# p& B3 t! J            abstract public traversable getiterator ( void )
7 d7 j! T, `8 |) B0 _% `            }
! N% U; D$ j# s/ e3 ?            
! X: r, R3 z0 X5 k: V$ \2 t5 E            
  getiterator是一个iterator或traversable接口的类的一个实例。如下获取外部迭代器实现迭代访问。
* `7 E) ]6 k' P/ k: x  ?
; c5 e/ W, O& b6 [+ O
            1
, Q/ r% Y- F0 Z            2
  }" \( N# Z, @2 i            3
- C3 B' X8 R" z  F0 w. Y: J            4
2 p1 o% g- Y# `3 E8 M) V$ m: `            5
. R5 t2 E4 o  j) g" a0 Y1 _) V            6. ?% i! @9 a  G2 |
            7/ W. A) z) B8 h! r. d6 Z) z3 J
            8
( |2 j0 {" Q% `" [4 n" b/ r            95 j; y6 W3 O% i0 |$ @0 l* A
            10* I6 f; K% n$ u7 e7 Q  u$ o0 n; e
            11
* r$ o6 ~, o1 {: u: _. U7 N( h9 X            12+ a- u6 U& \/ s! Z. E4 B8 ~- [& Q' s
            13) K" [3 k8 _9 O4 ^+ x9 A, L+ M
            14$ N" c2 V' @% W6 K/ ]
            15& y# Y" p. D6 |2 w& c/ }( E
            167 @, S% v0 u+ [2 k' S; l
            17
+ b$ e. n& C# v            183 x0 X' d8 d3 k3 z  r$ I8 ^. i
            19
. c$ D9 q( s3 h" \6 [            20
& G6 {; r6 a2 j* N: C7 ^: b3 M            21
  O  g' S' O# V$ ~4 l            
                        class mydata implements iteratoraggregate {: X1 a0 ]6 s" E' C, y/ O
            public $property1 = "public  property one" ;
* [. L, \8 ?. t/ V! R- x9 x( ]            public $property2 = "public  property two" ;
2 g  o! Y" K; d            public $property3 = "public  property three" ;
! G/ |0 l0 _3 W2 m: W6 l) p             ) l* g: D) {( S/ G6 R. i( ~
            public function __construct () {" A5 S2 Z& s, M$ _
            $this -> property4 = "last property" ;
1 [; a0 I0 t8 @, F) I2 P            }
& U1 f/ I5 B8 O5 J1 F3 ?7 z/ C            
+ v; S9 U3 E2 V9 K' R* t6 m, ~5 A             / X  ~- ^- d; w8 V2 g" O5 X
            public function getiterator () {
, B- U" f- t' A+ d            return new arrayiterator ( $this );
: W# B( i) c% ^( G            }
; D: a" H3 E! Y# L7 H0 Y# s            }
4 e; A8 Q9 F9 Z" m$ T6 d7 h$ m             * _; M0 P, U4 ~1 {& J7 j' }
            $obj =  new mydata ;
2 w5 D" d6 H5 t            
) a% j7 ?; T0 {+ n. [  U3 U& y! ]            foreach( $obj as $key =>  $value ) {
& i# Z# s& ^, r            var_dump ( $key , $value );. n' [+ P- G( ?% F
            echo "\n" ;( P7 ]# L& c; H8 t+ l9 q$ G7 b; J' M
            }/ E. T/ D8 ]: p7 G# X/ [! C0 O4 F  V
            , g/ ]% h- {4 G6 |& o  N
            
  4.arrayaccess数组式访问接口
" N; q, d! X5 ?, o4 I  \; `4 L. m5 R9 s  接口摘要:
8 }, W0 s% h5 D: C. L& o- `! N% M$ _  ?
% S1 N3 [9 J; E" Z) o# D
            1: S: s  v+ M& P% P0 P5 i+ T  q
            2( p4 w6 B* |- l; i) Z/ B$ b& U
            3! U: Q0 G+ I0 J9 M) _7 T- N
            4
  Y6 y- a+ Q5 P. P* f3 v6 r            5
; |# }7 }& a$ _' Y' u9 T& P. x            65 W5 Y' k- ^( w/ Z. h
            7
6 `; ~& ~& W8 ^% K1 g, [7 r8 c            
                        arrayaccess {# @5 i; s4 ^' s4 f: Q/ p% {
            /* 方法 */
; P% H' a- q/ m            abstract public boolean offsetexists ( mixed $offset ) //检查偏移位置是否存在
' \* X" H$ f& ^5 c            abstract public mixed offsetget ( mixed $offset ) //获取一个偏移位置的值
1 B8 x( t, T  B4 o            abstract public void offsetset ( mixed $offset , mixed $value  ) //设置一个偏移位置的值
4 C; {; {/ q/ o1 d+ Y* ], U8 H& L            abstract public void offsetunset ( mixed $offset ) //复位一个偏移位置的值
1 R0 r: d% K) R' c            }. [5 R- d% @1 k! U- ]( l9 k& ?
            : \( n. t1 y' {# h) Q
            
  如下可像访问数组一样访问对象:
$ S- u, i8 ]! r; s9 N  ?
6 \) q3 m5 W: O8 K+ x8 t% |8 t  V
            1
9 T* [2 O, S+ Z* Y9 m            2% \, t: A' h0 V, A* j6 d8 ^
            3! k& `* I7 U" g& s
            4
7 M4 b5 L; l) C/ F. J            55 K- b! `' c6 s
            6/ V: D# E# \/ n% h. s
            7
% x2 |1 C0 d) Z  a5 K0 w            8  W9 q5 U* \7 n" d' a0 K$ ?" ]1 g
            9
0 T; d5 m6 H2 K* C            10$ F6 n; I9 \! q, x5 `. q( {1 e0 q
            117 `# C' _# F( R  [3 z8 c
            12# K- G$ m8 ]: b) S" A- e, n
            13! k1 X3 C  @, \7 `) c
            14
1 S4 ^+ E. j5 n, m            15
5 a) O, T" B9 {3 B$ ~            16
, C. b" I1 V/ O+ E; q. [            17
$ C8 v4 w% S- |  I            18% l1 E  D7 ]2 h2 o- H
            19
' [- V- ?' i/ ~$ Y8 Y5 p! ?& t. z/ H! T! Y            20
4 c) g) h# _3 ~            212 Y1 J0 q9 E% R( y' f: P
            22* k& X9 G% _4 b8 u
            23
$ L5 h# Y1 u$ p/ y) m6 P7 i9 g            24
2 R$ _/ d  K; n$ Z* L5 I            25
8 @' ~/ [" z1 D; }            26, @( `; V6 N# `2 E  `
            27
  u: A7 F9 P$ k$ c0 c            28
% ^) L. E8 k& o7 s/ H            29
; m. t9 |! c1 Y            30
2 H6 x! m, _. E6 u) Z' \5 H6 t, ^            31
* j+ i0 m+ d  ?" d' H            32, r; g" `! Y7 y8 C
            33
, ^+ z8 I' d5 i# f2 a1 C- Y8 y            343 v4 S3 ^1 P8 C- x5 O4 Z0 Z; U
            35
# h4 P7 h6 L- v% O# x            36
% f# K3 p8 j0 {) h, ^: }7 e            37) m# e9 M' e" }1 t
            38
. C( [. o* {! i7 m8 f: x2 P$ c            39" k: |+ g* A# R
            
                        class obj  implements arrayaccess {, g( ]" m. T* }# ~9 \
            private $container = array();
& U" B8 Y8 [1 |$ ~# H3 j            public function __construct () {/ {7 ?- x7 S5 f' c& f; l
            $this -> container = array(; j% l4 C4 W+ E" V0 ?. ]
            "one" => 1 ,
4 c# w2 k! g( H; G: ^* x            "two" => 2 ,
* n6 N5 ]6 D3 l$ J4 S* J& `$ t            "three" => 3 ,
2 T/ d3 v# z0 E6 }( F0 A            );; _- U9 Q. Q8 u5 r% U1 ?+ k* _6 p
            }
% b% F+ b) K. Y: p& c            public function offsetset ( $offset , $value ) {* a7 t" x+ w" x8 b; N; W" H6 E9 b- ]
            if ( is_null  ( $offset )) {' f1 W) k% E& c+ m7 b. r, F
            $this -> container [] = $value ;/ ~( B5 B/ N/ L* h9 I% d% V7 V% K
            } else {8 V0 J5 l% C5 A/ _. I
            $this -> container [ $offset ] = $value  ;( M9 A: {+ Y0 ]2 o4 X0 O8 ~) e
            }# O+ C+ b' f* Q" n
            }
5 S0 [% _+ L/ |# @2 @            public function offsetexists ( $offset ) {' }9 j. T8 a1 K3 _' |
            return isset( $this -> container [ $offset ]);7 @2 {- V1 X, K: L* ?3 N$ D
            }5 u) `* x0 Y! j" J# b8 X
            public function offsetunset ( $offset ) {
/ X; ^4 v( k8 j9 v- o. G, _            unset( $this -> container [ $offset ]);
! W* `5 t* g8 k9 k            }
# I. |8 K4 {8 }            public function offsetget ( $offset ) {
1 a$ V# a7 J! x# C" [            return isset( $this -> container [ $offset ]) ? $this  -> container [ $offset ] : null ;* Z0 S+ J- y" s3 d
            }
  \. e# _7 g4 `. L2 [: s            }
  [6 @! g' x% L. _: e7 Q! _, T             & g) g1 X& g* c$ }* d  W9 i5 K
            $obj =  new obj ;
4 I7 ^: J8 B! x* v1 p$ e9 l            
+ ^2 T) N5 T( d% j* j8 `) ?1 _            var_dump (isset( $obj [ "two" ]));- q" N0 o+ F: ~8 N: a" h$ u- m
            var_dump ( $obj [ "two" ]);& @9 V% ^- G$ q; y$ ^
            unset( $obj  [ "two" ]);
3 q2 M1 ~0 M7 q- W9 Q            var_dump (isset( $obj [ "two" ]));& P1 W, M. d# I9 r) ~
            $obj [  "two" ] = "a value"  ;
: G8 r) Z( l% X; S. Y/ E            var_dump ( $obj [ "two" ]);) b7 i6 v+ `( a! x# q$ P
            $obj [] =  'append 1' ;" i- t; @9 R: e; ?4 G2 b$ S
            $obj [] =  'append 2' ;8 @1 `9 j! K4 n3 t5 b
            $obj [] =  'append 3' ;
0 L; W- @, U! M, }! k# M( x            print_r ( $obj  );2 U0 @  v! o) E" U$ ^; O
            8 b) i  X  N' r" V) z6 l
            
  5.serializable序列化接口
0 V# ~+ a: v3 z$ L/ d) J  接口摘要:% B+ a* W* ~2 }
  ?: B% _$ I6 l" D& Q4 x6 ]" S
            1
2 y( P' T  m" _: n: C            2
! |; S9 [: u# d: b! K            30 ?% K- _+ P3 f6 R- ^
            4! ^7 y5 y8 H- Z4 j' W
            55 Y6 i" d  `0 z# y
            6
3 P% |! \: J5 B7 Q* d            
                        serializable {3 I3 j% l' R) F; N
            
, `6 k' Y+ ?1 ^+ A            /* 方法 */4 Q/ z& i! D$ s( ^
            abstract public string serialize ( void ) //对象的字符串表示; q& g) t. h7 L6 d' H! X
            abstract public mixed unserialize ( string $serialized ) // 构造对象, w3 g# a* A# A* Z3 c
            }
+ V  z' o3 F* k( {9 ]$ Y, |            
' T4 Y: j' z7 p: \            
  实现该接口的类不再支持__sleep()和__wakeup()。使用很简单,只要序列化对象时serialize方法会被调用,当反序列化时,unserialize方法被调用。
6 Z, Q+ C& y/ N! p% [* l: d; `  ?
$ I* r0 ~/ t* i- v& `, [; d
            15 Z/ g8 B$ n1 E
            2/ Q( @* U" F4 M' X1 V
            3
9 u' ?, F! ?0 ^            4+ g( l& m5 O, l2 w9 C' g' T
            5) b7 x. g. z3 \: _
            6" h- F' |- |0 X, D- y! i1 z
            7$ P3 F+ {0 C: M2 g" v
            8  X4 N' i$ M6 d; X! }5 m
            90 X7 m0 k' S. U, x- R
            105 y! a- W+ L% |6 h% T! i: e/ E1 I
            11& z6 e0 i% R1 _) C+ c
            12
! L: O! L7 h. ~            139 ]$ }( e6 J8 Y" c, D
            14
2 R, R  C3 w' G* @/ L+ E            15, g6 H- o9 e3 P& z8 z3 D. C8 b
            16
* T# h" B7 a+ o: B( ~            17
4 J6 v, u4 L. U6 W            18( p1 E" \0 Q: w$ |
            19
9 H: @1 ?5 F/ P+ o            20
+ l  h- k+ Z- ~2 H7 c* K, u6 w            21
  t1 c+ Y9 m/ G, s. ^4 y, @, C            
                        class obj  implements serializable {
! c' J, O% U& x            private $data ;
4 Z2 D1 m' j& n8 Q! D2 a( h: s: c3 b            public function __construct () {
) V% d- Q4 u; R% _1 _: M            $this -> data = "my private data" ;6 K0 s/ ~1 L$ f, u2 `
            }
0 E: [% y9 |5 c! `" U% M% n, [. A            public function serialize () {
& c" p( x& `8 y, y! [/ h# C            return serialize ( $this -> data );
1 K: ?5 `1 _  o& b) i- [& x6 Q            }
6 Y# @$ P4 ~1 ?            public function unserialize ( $data ) {5 K! \3 ?. I1 L, G
            $this -> data = unserialize ( $data );) r+ ^2 Z/ J! v/ \& L- S: u
            }
, [0 c. ^' h8 o- Y# f            public function getdata () {4 Q) w! |+ a! ^& @
            return $this -> data ;
5 U1 K9 U2 \1 {4 D. @            }
9 r# m( `/ v2 r# R+ T; U            }: G: |0 W: m$ f# \& q6 Q# a  m, }
             % L$ }8 @+ W% `3 y7 x/ |! s8 K! s
            $obj =  new obj ;
8 W6 L$ K/ P6 y! d# A1 H            $ser =  serialize ( $obj );
" w7 I, ~0 K2 \! U5 l$ U! J            print_r($ser);
* P1 f+ S6 A2 V% y; w0 a            $newobj =  unserialize ( $ser );
# w; C$ b; j4 A( }2 a8 `4 s3 n            print_r($newobj);
) b8 F7 n( A5 j( F. B0 g0 h9 Z            0 i  Q! o; ?! A4 R# _. i$ V0 z
            
  6.closure7 A4 Q% i- Y# _, u( y( e
  接口摘要:
" p: _; C. i# j* D6 v: Q, i' E  ?
* h' I) `! t" u( m! w
            1
* [! s/ e- |, u: ?+ C2 s            2
) o1 W4 O- n, J0 M" C            36 d! A" m3 s1 G
            4
2 D" l. W+ _# u6 R# g            5
5 a* b; P% P; A# z0 v& h3 O. y1 n            6$ a+ r, v; R! n3 n/ [
            
                        closure {1 S4 B8 d+ F$ D# Q" P" ?
            /* 方法 */' [3 i# N- J: A1 \! Q6 h
            __construct ( void ) //用于禁止实例化的构造函数: S# u/ W! u" A' H! e9 u
            public static closure bind ( closure $closure , object $newthis [, mixed $newscope = 'static' ] ) //复制一个闭包,绑定指定的$this对象和类作用域。, v7 r9 ^' g, |; P
            public closure bindto ( object $newthis [, mixed $newscope = 'static' ] ) //复制当前闭包对象,绑定指定的$this对象和类作用域。
) i" y+ e8 ]$ }$ a3 F            }" d7 B9 X) s, K! ~- Y7 ]) d2 I7 P
            % C. K1 _. ^. o: [+ R$ h% x' ^
            
  ?
) [& w$ E9 V1 z' S" T1 z0 C
            1. H, x+ B6 N+ g  q$ N4 Q  N1 l
            2
! s8 D  Q% f5 ?/ P& ]% {5 l            3
( O$ b+ y4 M: S2 N& U4 |            4
2 }" c6 i7 ^+ K# \' @+ H5 b7 R            5
7 G+ f; }" O6 T* T            6
1 h; i; N; ^' t  F' X# {! [; h            7
5 `, C5 C' `6 v* n5 W            8
0 A9 V* f, w  I$ Z            9
5 G* g# ?* x: U% K% z            10" p, m0 s+ C& k  w# F) m
            11) l# g$ h! I9 R. Q! g" z  F
            12* H( G& p8 I1 t2 j
            13) O# L# N# y. ]6 ?) K
            14; D/ U! H: F) Z
            15; R" R5 t4 B+ Z5 q( o  }
            
                        class a {
' \$ f; r5 r5 k' I# d' Q2 c7 s            private static $sfoo = 1 ;
3 I7 J! X3 z& @* h            private $ifoo = 2 ;) R# ^6 L% }0 X$ r3 I2 i$ `
            }
2 \6 \' h3 [9 s5 [            $cl1 = static function() {  k  d& i4 f( A% v' b1 G# r2 r3 X
            return a :: $sfoo ;; E" |4 P( u. {9 u, {  c6 T
            };
& C0 x6 K' J/ Z% @) K7 }3 I8 N            $cl2 = function() {5 g  C: `1 B- p2 L/ |2 e3 O- s
            return $this -> ifoo ;
2 ^& Z/ P' a. c7 ]4 ^! Z3 A            };( z! w1 A+ H$ B7 d* l5 s
            
& a$ C1 F0 S3 R            $bcl1 = closure :: bind ( $cl1 , null , 'a'  );2 B8 i! c8 D+ X* S: ^
            $bcl2 = closure :: bind ( $cl2 , new a (), 'a' );
6 c" U6 H" \" l+ u4 m7 U            echo $bcl1 (),  "\n" ;
1 ?9 Z, W$ D5 R9 o- W  D! ?            echo $bcl2 (),  "\n" ;
/ c+ Z8 H' W7 k, o            
" e: ~- t+ l. \$ v6 ^8 O% v9 t            
更多网络编程信息请查看: 网络编程

回复|共 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客服 返回顶部
快速回复 返回顶部 返回列表