返回列表 发新帖

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

574.8k 9
swmozowtfl 发表于 2015-7-28 11:32:32|湖北 | 查看全部 阅读模式
  这篇文章主要介绍了php中预定义的6种接口介绍,本文讲解了traversable、iterator、iteratoraggregate、arrayaccess、serializable、closure,需要的朋友可以参考下% \- X8 V0 t1 S7 P/ }8 h
  php预定义了6个接口介绍如下:
8 y2 c) w: b; ?: [0 X& O5 d  1.traversable遍历接口( x7 y7 n6 G! R/ M
  呵呵!其实它不是一个在php中可以使用的接口,内部类才可使用,它有一个用途就是检测一个类是否可以遍历。1 z# }5 J7 }2 u0 u- P
  ?/ M# {3 S5 f! b+ v/ c$ c
            17 u; _9 F8 i% {) Q& D) B; H( ?
            20 [- ?$ \+ r5 h7 P& B* g
            3
9 R/ X" X- r  l; o/ Y2 c& X" R            
                        if($class instanceof traversable) {
0 t( }1 O6 B1 M& V5 Y2 I3 b. N            //foreach
9 W: i8 o2 W$ U            }
: u9 G3 O0 o+ f  K            
# V3 W/ k% r: d6 `            
  2.iterator迭代器接口3 g/ z% _- a3 C4 \
  接口摘要:5 c8 Y) j. T# ^" ?4 W
  ?
7 x" Q" ~% _# @8 d& q/ c: s+ M/ e
            1; B) K+ }& E% c2 z
            2
: F* X, V3 c& I# e8 _" @            32 Q  Y! _' b( F$ L" P* G
            43 @0 E4 D0 O4 L1 Y: d
            5
0 P. ]" y  X. J& w            6; z5 g& q; c. a+ e; W  x" H- b
            7% M0 n! \3 I  V6 P/ A
            83 q% F0 ?% |# p$ E' e  w3 y6 p
            91 X& h# k( T1 U
            10
3 _- N" p; b  i/ N% g$ w* y            11. w9 w- @8 o0 J0 H4 x& l
            12+ m1 {+ N  ~2 T0 W. ]/ m( s
            13, r! B; s6 _) S. D5 M( h
            
                        iterator extends traversable9 [% |  L( q) j
            {
" V, {- z% J4 c. z            //返回当前索引游标指向的元素
! p  ^; E- C7 M& R( O+ G* E            abstract public mixed current(void)+ N5 ~( [/ H! Y" O' m' I( S$ q
            //返回当前索引游标指向的元素的键名% P9 A% `3 w7 J
            abstract public scalar key(void)
& i' k0 h( M. S9 v            //移动当前索引游标指向下一元素. i8 j! U' k9 L8 y! z# ?" E- w9 V5 {7 `. X
            abstract public void next(void)
0 X* y3 {" b4 @1 ]( }4 a            //重置索引游标的指向第一个元素
4 \  d) d7 C; F6 O/ O1 m- c5 n            abstract public void rewind(void)4 l9 O, J: a4 P+ U! A# D
            //判断当前索引游标指向的是否是一个元素,常常在调用 rewind()或  next()使用* X0 x: f/ L8 Y, W( X, z
            abstract public boolean valid(void)  u- U' g; B& S8 K; G
            }
3 }( ], ^1 g. o3 W+ g            + k: Q# \7 V* `8 v8 q$ K, S. r
            
  以上可以让一个类实现一个基本的迭代功能,如下可以看到迭代的调用顺序:
: V0 Q1 Q2 q. n- d8 j' u8 X4 j  ?( C( n& |4 f/ k, V0 G
            1; ?/ i7 I+ |  s! G
            27 N4 b' b4 l! R7 C) \2 ~  n1 s
            3
; I8 A7 z7 ~/ |0 p& Z# |            4
3 l7 V6 |1 V$ x" o            5+ \, V6 P; H$ @
            60 y) G8 q! ~( j- E* [
            7
7 i7 a: ^7 U* I( e. R            89 }; Q( x" _3 B3 j/ Y5 Z
            9
9 Z+ ^. a1 a5 t" J6 r            10) F. c8 e2 V# e8 G- `
            117 N2 I. M$ S3 b2 T3 o
            123 c' F& @3 Q, ~1 A
            13
! o: n9 e; h6 V  L" `            14
! O, u1 m. B2 l            15, E7 [! |1 `5 x7 i* s7 N/ W; d+ Y
            163 e. r  s! B! x3 g; W
            17  h* [/ [) G: \* l8 A% {
            18
( J6 R4 X2 u- e9 ?' {            19! P" ^4 j$ \2 E+ A  b4 ?4 p
            206 \4 k5 V: h- Z& D5 u) O/ i1 O
            21
' \7 k/ w0 }3 A$ k3 G1 p) U1 ]            22
1 q) X6 x/ W  S' f; v' V9 [2 K  ]            23
) Y7 L# b# e" R# h3 ^; C( v! Q            24; y- Z3 q2 C2 `' Q& Y2 B8 \+ s2 P
            25& X' n5 J! f3 W: t9 k5 M2 ?/ x
            26# z) U) R+ @) x& w* T" w
            27
* [8 ^( Y" V( n            287 K. ^: P5 b# T9 J5 w2 {
            29' n. W8 [" e4 i0 O& K
            30  y5 V* f/ m' j
            31# A9 m/ ^; f1 J- k# R9 w) w2 y2 b
            32
  V# T0 a* k, d            33
' h" W$ B! k" y- e$ G9 P. s. e            34& j: Q; }8 q3 g) A5 K& L, D
            35
0 e7 u; O# A+ A) b            369 f4 c# o4 j9 |
            37/ t: @3 y/ i; Z  H, L& @8 ~
            384 D- z8 f! _' B6 v! J. }
            39
  D# k$ }- k4 Y& v% ?* T            404 P" o: F4 O5 Y+ z
            411 H$ j( M- q; c6 O: u6 T2 A: ~: D
            42
$ b" X- \1 H% }9 d2 _- a: b! P  T            434 |% ~* ^$ F+ T6 D7 n
            44
: m' z8 W1 e( l3 U/ _+ {6 V+ C            
                        class myiterator implements iterator {
4 z* M  C0 E7 n            private $position = 0 ;
+ Z8 A3 n( e7 F            private $array = array(
$ E9 x: u. O+ u9 X3 }& s            "firstelement" ," P; c( C  j) Z" P
            "secondelement" ,
5 Y0 s  {2 v$ y            "lastelement" ,
( {6 W+ E+ N4 {. X) r. C            );
" ~+ j* w% k5 E            
3 f0 c8 `/ ?$ h* l/ z6 I1 a/ p( C            public function __construct () {; S; H/ w1 [0 F0 b" b- P
            $this -> position = 0 ;6 C0 k" M; P* X% p5 j
            }
5 f. S: G3 R9 }            
, f0 R0 g+ N- R) d            function rewind () {/ `3 p/ n5 h" m6 _5 l9 V/ {1 c/ t
            var_dump ( __method__ );
2 s/ u1 r' l) \. V2 [; ]* G            $this -> position = 0 ;9 C) R+ U0 O! a7 L; Y
            }
" f6 U/ n& H) y6 n0 P+ R6 ^            
* k5 ?" |2 Q) I; L- ?- U3 P7 C            function current () {
  K( A( x0 I* K+ ?/ m            var_dump ( __method__ );3 M7 t; a3 H$ W, h
            return $this -> array [ $this -> position ];/ D) G* l, W& i
            }
  Y2 @( p' k; c2 n2 [  |' F4 \             + a1 _! L  o- g9 G" v) C  e
            function key () {
# d% f: r- I4 r7 t* W            var_dump ( __method__ );6 M' M& F# T- ?6 [, t
            return $this -> position ;9 E. B/ O9 |& V. S1 }6 p5 a" c' ?
            }% ?1 u3 q, W  ~  L% u
            
* A' h  A. n, b            function next () {
6 R) R9 Y8 R3 @            var_dump ( __method__ );
. a# U& S' p7 M6 k0 E/ |            ++ $this -> position ;
0 [& S; _% @- O- x3 W3 i/ V            }# S/ \2 B6 U- h. k$ B
            
7 d3 ?8 P" y* t' c            function valid () {
% I% f& Y9 n7 X0 h7 b2 R' ^1 y            var_dump ( __method__ );; r: F& S3 f5 k  u! M! M
            return isset( $this -> array  [ $this -> position ]);
" O6 H# S. I, U( T3 c6 A            }
8 U7 o8 X2 v4 f' y6 h0 N            }
4 W: s$ T- O) Q# K; t            
  Z* I5 U- ]$ o  K0 g  W            $it =  new myiterator ;
4 y( a8 p! K# M' q0 z            
! ]3 w1 a% d2 _2 U' T. O6 c            foreach( $it as $key =>  $value ) {1 n" }% B  [7 `1 w
            var_dump ( $key , $value );2 H6 r( W! R0 W
            echo "\n" ;
5 K; M% W; S) G( O3 p5 O9 @; }! p            }
+ P6 {: x5 S4 ?1 G5 }            ! M0 [% q& h+ S
            
  3.iteratoraggregate聚合式迭代器接口, |- w9 y8 z% t( {% P8 Q
  接口摘要:
8 c3 l) G; O& J! ~& `  ?
( N8 q6 I+ i. X: Y* |
            16 n7 J  e" g% x! B) E
            2- p/ y+ W( `5 K/ A0 d6 _  t
            37 }' E" F# J% M9 M6 y7 X
            4
8 j5 \$ `. M# f# u3 n8 K+ t            53 x' M4 G' {/ g2 f4 Q
            
                        iteratoraggregate extends traversable {
# y0 x3 R8 f# R6 j1 P0 p             5 J1 m  y) |* P% ^# h
            //获取外部迭代器; C; T3 s( B8 N2 Y; k, w
            abstract public traversable getiterator ( void )* ]& T: W9 u8 F  _8 N
            }
5 H7 N$ `2 s  u4 n' x# M- j1 A            1 O) \+ ~+ }- o$ e3 y; w4 r/ v; b% {
            
  getiterator是一个iterator或traversable接口的类的一个实例。如下获取外部迭代器实现迭代访问。+ @, u7 j+ `0 X8 p
  ?
8 A- t; P+ W( {# T
            1
, W2 ?- b1 _/ s8 ]% \6 {" a6 V            2
0 A: i. k4 J6 t' n! q; P            3
) \1 x$ L. T; |. p0 W* `            4
( x: g$ _3 {+ m! B% R+ L* f. b. s% a            5
2 G0 w" z; z" x# R; _* p, t" u            6! X3 B; P+ _# H1 v
            7
; n1 q7 x9 G- c            8
, l# u- D7 ^8 r$ |0 {1 I            9, v# p( s" r2 p, M
            10. Q2 R2 g6 @7 r: t1 k2 b& Q5 J
            110 W% r8 O6 m- ~! d
            121 ^) j0 S& W6 N8 Z, p
            13+ ?, W: E7 [, e  g* N0 [; i
            147 q/ p" W5 K. I$ k8 p
            15
. s5 P/ k* Y/ ~- q. ~' h6 N8 A            16" g; }* d/ V# d4 a6 b; O, Y
            17. j& R/ F* j4 l' j0 [
            18
% f) d& r7 G$ A6 C            19
0 s3 c6 f* n5 v" _0 b4 E            20" t0 e! t9 K4 y* {
            21
9 p0 l! t9 W9 y) [1 [4 x+ W0 R            
                        class mydata implements iteratoraggregate {/ i( Y/ P( A( S% r% O! @, C6 j
            public $property1 = "public  property one" ;
! c' s( j9 A* K$ j4 w+ m% ]            public $property2 = "public  property two" ;: s; b) q) T% B, |* O9 O
            public $property3 = "public  property three" ;
' a: H8 Z0 c0 l% j6 h  }9 X/ S' p             # _2 e. Q" i) f' }, i% f" q3 y. g
            public function __construct () {$ s+ ~+ A+ q5 B
            $this -> property4 = "last property" ;, p  \3 v. z* q+ N3 |
            }
, ~. z% e( ?# w3 H0 s  ^/ u            
, V" z0 N4 G/ a8 g' I6 e6 ~, S             1 ?) \+ \# C! Z% ?9 C
            public function getiterator () {/ x# }) J. N2 B3 j
            return new arrayiterator ( $this );7 W9 a) J! ~3 o) p
            }4 y' z& D& Q# F# d: ~4 f+ l
            }
8 D" j& U+ @' q) P9 @            
' k4 `6 G) J6 _2 i1 S            $obj =  new mydata ;/ O; r' O6 p) A
             5 f* P6 I) s) w5 V9 {
            foreach( $obj as $key =>  $value ) {+ b" N3 X7 `' U5 O
            var_dump ( $key , $value );* V7 [7 {% O7 t
            echo "\n" ;
4 k6 N7 ~0 Y. p/ R2 H            }
! N8 T3 d2 _- }& l% S$ I            4 J1 r$ K' I) Z, H$ B9 j
            
  4.arrayaccess数组式访问接口
6 N2 V% ]6 z' i  接口摘要:* ]* s) R& Y: l/ N- N& r# i7 o+ _
  ?) {2 d$ i) |& `, r3 W0 e
            14 U; Z: D: C4 x5 P/ r& _7 a* M3 ~  g
            2
$ j) q4 ?- v+ k! {. v6 x* h7 x8 C            3
5 O1 ]/ W% C% T, H' o  N/ H            4
- G0 J* D: ^( X, a6 R/ r7 _            5
( r4 ~6 m* _( V6 g, k' t2 A            6
/ M0 V9 Q* k# [. l, J+ W  K            7
! A1 f7 |! a8 b: I0 W/ I            
                        arrayaccess {9 Q* @/ ?$ ?8 u" y" Z3 w$ S0 A
            /* 方法 */9 l8 a7 O& j: G% ]% _# b8 i
            abstract public boolean offsetexists ( mixed $offset ) //检查偏移位置是否存在
, L9 v1 |+ W: @2 |            abstract public mixed offsetget ( mixed $offset ) //获取一个偏移位置的值
: X) P, G2 o  R' c            abstract public void offsetset ( mixed $offset , mixed $value  ) //设置一个偏移位置的值
8 P8 v+ K: C$ Q% c            abstract public void offsetunset ( mixed $offset ) //复位一个偏移位置的值
; \. {: F8 ^8 G* i9 B5 p, C& h            }4 x6 a# M. Z' g/ H9 o+ ~( R; C
            . T) E3 B( P2 t6 M# j* m
            
  如下可像访问数组一样访问对象:1 O) Z4 f& _0 x7 F
  ?
% f4 q. e- x' A
            1" v; E: x! L! y# ]0 l
            2
# \# Z3 G* G% R8 Z            3& l/ U' u! W9 D8 g4 [3 E, i0 q6 v
            4  K( x; @) |5 r; r" t
            5$ `7 W# w& J& h$ B' o5 G! F. |: k
            6
5 @5 W/ Z9 ?8 h. s& P; o( v% m            7
! _9 j/ h8 ~1 E" c7 y9 m0 y! ]            8. L# H8 u6 I3 }7 V  O
            9% V+ o0 ^! P6 W9 F; Z; x
            102 {2 J( d9 a* T! i" Q
            118 L4 P0 R' r4 Z. B  [: ~
            12
+ j% C6 Y/ k- `, m: [2 x            13
$ t# E7 Z1 {' I; _, i- \: m; v            14
! \6 n, ]1 ]- {) `; L            15
! A  L- S7 p8 [" G% D1 C            16
+ t, _- x& Y  y: [2 X/ H            17
, R* S7 Z% Z2 q" b& [* @            18
6 n+ ?" h* Y0 q: g* _/ e1 P            19
) r& f! q- o' g9 G7 U* J' C# u            20% }# a( j% ~7 |' r; N$ \
            21
2 Z/ c$ j* k- E5 ]8 u1 \  f            22
) h" W, O. V! y# K$ N% r" y            23
0 X5 @) ?3 O& Q$ }: F* f- Y3 G# F            247 c3 m: V5 _1 t6 ^* _. ?* O
            250 s+ w5 ?; v" K1 @1 v
            265 i4 J: x/ d2 |, o
            272 U( k2 o7 S! A: O$ _
            282 q4 n0 P) n2 Y6 Z
            29
$ u, a; P5 `& _5 R1 E            306 v% G8 ^8 C; U0 q5 |; @, [3 }; m
            31
. [3 a) l4 y: y+ O. h7 _            32- P, r3 [/ s* ^+ A! E7 s$ V: C
            333 q  B$ |% c* s: ^* D! h
            34
; t4 n. t/ y* i            350 N" E/ Q* \6 s5 k" L) i
            362 i7 }1 f& p7 U
            37; J. t. H  x+ b. x6 e
            38
  _. h+ u1 u, n. E7 Y            39
1 |' J& K; v- e. L) X  O            
                        class obj  implements arrayaccess {5 l; y8 K/ v/ x2 k
            private $container = array();! `1 Y5 k1 s& B/ O
            public function __construct () {
: y$ b$ r7 Z  M1 T$ p+ ~# j) ~' l            $this -> container = array(! T$ q9 J' ^+ E/ S8 ?& L
            "one" => 1 ,- E0 i3 d# Z6 F! {. i& A
            "two" => 2 ,
  j6 e+ B* n0 @" H* Z6 d            "three" => 3 ,+ j- A% ^; A8 B# D4 }8 l
            );" ?7 g( T# w9 l- R% V
            }
2 o/ y! W, G! e0 H! [( x            public function offsetset ( $offset , $value ) {$ F* w2 K- g) y$ m3 T* m' F
            if ( is_null  ( $offset )) {
; j2 |% d! y1 P% _2 S. P            $this -> container [] = $value ;
/ w6 m5 r" ~3 f2 W+ ]            } else {
; I; {" g( V% Q5 t. t' a$ y            $this -> container [ $offset ] = $value  ;
- J0 Y& @, Y( W; S0 S5 y6 _" v1 P            }2 h8 r+ V) g& a# k
            }
% C1 f1 D' G" v% Z, x! D2 D+ L            public function offsetexists ( $offset ) {  K" Y5 k) B: F% U: Z
            return isset( $this -> container [ $offset ]);. ^" Z+ W( g9 b! L/ `8 O7 g
            }2 e3 ?+ r+ m% j2 B$ O
            public function offsetunset ( $offset ) {
; c' o1 U. i* N7 v7 b$ [            unset( $this -> container [ $offset ]);1 ?6 ^% J- v# ^% |, Z. g5 @
            }
: T7 p. _! h! x4 v            public function offsetget ( $offset ) {
  t' O  V( L$ j0 q            return isset( $this -> container [ $offset ]) ? $this  -> container [ $offset ] : null ;
" b9 T( _9 F; X% g3 e+ P2 v            }
+ I" N5 R/ E: ]: J/ t            }1 @% o$ j2 m( ~
             ; G/ J' z- `+ l! X
            $obj =  new obj ;8 w- z2 E8 k+ s$ L+ u( ~
            
2 M$ p- n: ]# c& M" M' b9 O% Q            var_dump (isset( $obj [ "two" ]));
/ I7 i$ J* {3 W6 n) R            var_dump ( $obj [ "two" ]);
  u3 G* w" v( W) B9 Y            unset( $obj  [ "two" ]);' I8 J" e: M  E  T( `
            var_dump (isset( $obj [ "two" ]));
* p, q; x  d! U1 Y5 X" K            $obj [  "two" ] = "a value"  ;
5 U6 j; q) D" J1 T            var_dump ( $obj [ "two" ]);5 T  U# O: U/ _5 W. i4 I
            $obj [] =  'append 1' ;
+ z  o3 O( @1 i8 z- R# D            $obj [] =  'append 2' ;
1 h4 `$ d* ^, i5 W2 K            $obj [] =  'append 3' ;
5 g: o5 }) j% ^7 M9 W$ H            print_r ( $obj  );; o- U# K6 u6 l! C
            
. k$ q0 s/ Z! f1 {            
  5.serializable序列化接口
) H5 k. E- X0 l; P  w  接口摘要:$ i  w. z) A: z. x2 n8 O
  ?. _- Q+ F# G, Z. n% `7 C
            1! D- H! v" {% f. ]- H2 @
            2
- K/ r* O* b# E+ @$ \* p            3# b  a3 N( ^% J5 D
            4
( P3 L: H) F/ Z3 Z( H! H( Y; S$ [            5' u+ Z/ ~- M9 z% B
            6, }3 t" c( H! n5 x! z8 \
            
                        serializable {
/ H& m: u0 H* L/ W' l# S% B3 l               K- g+ O1 C5 o5 M( @% Z1 l
            /* 方法 */
6 W" Y# x4 {' g. o0 k$ k            abstract public string serialize ( void ) //对象的字符串表示
! d! v9 K/ ?6 m" T            abstract public mixed unserialize ( string $serialized ) // 构造对象: m, r* F# x1 Q, ?- l9 L0 w
            }
- J( d+ n, a# {  H5 y9 D            $ j& Z7 [& H# u% J* p
            
  实现该接口的类不再支持__sleep()和__wakeup()。使用很简单,只要序列化对象时serialize方法会被调用,当反序列化时,unserialize方法被调用。" c4 {2 B4 z9 Q9 @+ B" V4 y
  ?
2 o# J7 \8 M: ~$ y; n+ H  w5 M
            1
9 r, |' A$ I7 b1 ]            2
/ d3 {- T( O! ^3 s4 X& e            3
6 J& w4 F) J% z4 U3 O4 L7 _            4
0 p' o/ Y6 O6 c7 s- X2 I+ b) U+ ?            5
3 B+ S5 W" m( x6 ?% ]  ]8 G  H            6- F2 x% K. h' @; V) L: ~
            7
& q* K2 {: B1 L& z0 Q            8
  d% w: c2 d3 c6 U            9
- o" z) u3 e% Z4 a) P( ^4 b            10
' t+ |" x8 y: b6 U" F            11: T4 p3 n4 x7 y  T
            12% e) b) H4 [& M! o$ ]9 `
            13
4 }6 w0 O1 F5 l# ^7 a            14) x4 A( X# a1 ^) P: N' c
            15
  V6 g. S3 D7 ^* a! n            16
+ a" _- J7 i; K# d3 n0 n" L            17
9 j8 b: z& ]$ M; a8 U* M            18
% X% m5 d0 j. D            19; v7 U5 b7 d' Q3 W0 r
            20' ~, o3 d1 f0 D, t" ^
            21
& Y9 {2 P; x. O3 A" x            
                        class obj  implements serializable {
' B/ @, X. R1 H, ?9 l# ~. C3 o            private $data ;3 Q" X$ F' A% t; p2 \% f1 j
            public function __construct () {
! N! n6 `5 Z  I+ B5 N            $this -> data = "my private data" ;
: s) D9 C2 M$ F8 U' c            }
; @: x/ D( H  V. Q/ L            public function serialize () {$ ?- s9 M9 `- `5 ^: }) V9 i! Q/ D. A
            return serialize ( $this -> data );2 |  I7 m6 K( H' L& }# U1 N# C' e
            }8 p: z% i" x0 I; v2 v# U+ V
            public function unserialize ( $data ) {
6 B8 h3 }1 ?/ J            $this -> data = unserialize ( $data );3 D$ l$ a6 G$ ~9 `
            }6 u' v: h0 F* o- Q7 j. V3 g* f
            public function getdata () {
% |* `# C2 g! U; @1 @9 X            return $this -> data ;
  S0 o- w& a; w$ R            }6 M+ n: M6 w% o' j
            }4 E- Z9 w6 s  B2 Y4 e
            
4 c/ \9 E. O5 d$ _5 X  {0 ?% m            $obj =  new obj ;
% o+ H$ _9 H* V, n) i% d            $ser =  serialize ( $obj );
* ]4 N, X+ M' }$ w7 A* }- ]. [            print_r($ser);- B- t, Z1 X5 K. ?' i
            $newobj =  unserialize ( $ser );
! F7 }0 _7 T& i3 ]            print_r($newobj);. k6 ~/ }' F, ]6 A8 f& w% N: z
            
6 n3 G* p. @3 Z( n$ T. _8 O7 \; I            
  6.closure2 T1 M% J6 k* ]7 j1 }
  接口摘要:
% ?1 O" q# Q- H) m/ ]% [  ?: M: {5 N8 [0 R3 Q+ a- p* r7 `
            1
1 H* S; v" U; S( t& m/ W% i0 v  }            27 h1 C6 ~8 U: O& ]5 v; R
            3
! W% I5 j4 W; v) n- `            4
* c+ w3 ^7 e+ ]3 k3 W- S7 @. L            5. y4 w& L7 A/ c# i: n& [
            6
* b# h# r" `, Y/ c4 q            
                        closure {
- [! f7 c3 {9 o9 ^' c            /* 方法 */
  i9 B# i/ x+ L            __construct ( void ) //用于禁止实例化的构造函数
/ Y5 d9 z6 {$ Q4 O$ p2 Q+ P6 x. A! g* \            public static closure bind ( closure $closure , object $newthis [, mixed $newscope = 'static' ] ) //复制一个闭包,绑定指定的$this对象和类作用域。# m7 s9 K. l$ e  ?" J) Z, q1 e
            public closure bindto ( object $newthis [, mixed $newscope = 'static' ] ) //复制当前闭包对象,绑定指定的$this对象和类作用域。# s4 ]& r1 `& O" L" M1 V/ P! _8 @
            }
' Y' V+ S% A7 g9 x' i, c/ M3 Z6 t            % }0 X9 [2 `7 _: k8 [+ K
            
  ?+ t" i* i$ i% I7 M0 h& [
            1* j. e- q; [% L% H% \# y- v
            2' Q7 _: ?1 e* r* G6 V
            31 |( k5 ]) A) ]( p+ F8 i: K/ i
            4
4 \; i0 s) Y# i+ T            5! t9 A1 i: C5 l" X
            6% o5 Q* Q  K5 ^. R* u) ]5 t. D
            7+ X2 d8 b) N8 p3 C% Q+ Y' X  n* _
            8
( B1 K9 X2 B1 S1 q0 {! W5 Q! `            9$ ?, l, H) ~! g4 G$ {7 {& Y
            10
# V( x' o9 Q4 E- x            11
8 I& X) m+ S4 ]' j( U            12
2 d. {1 E% J- E& D. J# k            13' Q$ ^7 @0 r% J5 p+ C  ]1 Y
            149 }$ H8 A7 u% v
            151 ~+ [0 W- Z6 R, j
            
                        class a {2 B9 T' q/ o1 j6 F. R. J
            private static $sfoo = 1 ;
6 S0 W) ^& p8 c  w            private $ifoo = 2 ;
# H# I: ^5 _8 [            }7 k7 d' C9 ^1 t) Y( n# L# O
            $cl1 = static function() {
9 G" I9 X" t5 t" Q+ M9 T/ `1 P            return a :: $sfoo ;
- b! L6 O, [( l( n0 N  d            };
% v# h) `! r9 t( I& x1 l            $cl2 = function() {
/ y+ z& o0 p- o' G3 H% S7 O            return $this -> ifoo ;' K; X4 y& ]; ?
            };& F; h: B8 r/ I2 g3 b" E* Q- ~
            
( ?1 E; e' ~. P3 i& Q; L            $bcl1 = closure :: bind ( $cl1 , null , 'a'  );
1 j0 B0 s/ {+ Q( x* `7 X            $bcl2 = closure :: bind ( $cl2 , new a (), 'a' );
% V% j8 N2 \* ]# N& w  s: I. f            echo $bcl1 (),  "\n" ;
( L9 Y" S( L% [4 v            echo $bcl2 (),  "\n" ;( q' @. w! [6 `" f" t
            
# P% r3 W; z9 d2 g            
更多网络编程信息请查看: 网络编程

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