得知互动

标题: php 类自动载入的方法 [打印本页]

作者: swmozowtfl    时间: 2015-7-28 11:32
标题: php 类自动载入的方法
  在php5之前,各个php框架如果要实现类的自动加载,一般都是按照某种约定自己实现一个遍历目录,自动加载所有符合约定规则的文件的类或函数。  当然,php5之前对面向对象的支持并不是太好,类的使用也没有现在频繁。 我们来详细探讨下吧。
# H1 H$ r, x5 N& g  php 类自动载入方法
5 l0 Q6 B; ]7 w" k0 Y  ?
  {3 @6 H6 e( e0 d: E. u; {
            1
$ A3 `! @8 i: _: z( S  ~: n            2
9 n' q4 y! u: G" \            3
9 M$ P* h* R) q9 i, u, k            4* }7 [% r4 {0 v% x: D
            5
* k" J0 V+ A. K; Q            6
" M7 t- P3 S" g4 A            7
; {) Q" A; v( M: R            8
6 Z# i. _+ ~( e. l( n            9% x# t* R# |9 B5 {7 v
            10# ^! b$ o0 n' V" G' }! n
            117 \' S* q. ]  O7 o
            12
2 u3 N9 ]4 }" [0 S4 {            13
- s% g( E0 x$ C9 P            14
6 q% d+ A5 ^; m& Y            15) u1 `& }* d: R- t& v4 g$ N( |+ W) k
            16
$ w4 U" r2 I0 t* r* w( F6 G* K            17
; O8 T1 G7 c; O            182 |# \5 D& a. Z+ e. [  D
            19! u4 Y' ~  V, s
            20
" c- P9 M# }* q5 f, y            21! v; K3 H9 i+ c9 m6 d, J
            22& O& Y9 i0 t: @1 B7 t5 U# P
            23: x0 c- m# @' `) e6 Y2 C
            24
+ m5 x+ l- n# K! G# z            252 V$ s) F" ]& q) c5 ]  G( r% q
            26( l6 S6 k/ N. j& f/ U9 Z1 @
            277 e. F8 x7 m3 ^: a
            283 M. A$ u4 u8 W4 ^( _0 B. v
            29
. `. W1 [9 w1 C6 L4 v; t$ O$ F            30
3 ]9 G, }# b: h+ t% H            31( A, i5 z4 w& n
            32
' _: D$ Y$ Z, L& ~/ a+ D            33& z0 e% e. y- U& g6 ?
            34
6 q& H% q: D" S            35' N' X: S0 q$ J6 g1 e% O! j  w
            36
+ R: g4 f6 b0 i! q            37% Y! Z* Q( c! f
            38/ p* d$ |& X: A! x1 A# X/ j: V
            39
7 X# E. K0 ~' b- i) m            40! {* n8 y6 v, _# R8 N
            41
# O' C; w$ H- I: L" k            423 W4 b0 Z1 A- p" _) \
            43
+ z% w& N3 V1 ^& g; I4 T7 U            44
6 R$ ]( s% S% ~5 z! k  o: G9 d            45
- r& K: W- J6 W' h            461 ?, p- v: z& l6 n1 c( l0 a
            47
5 h- p6 L* ~0 z2 n+ q7 F            48
- c: `. T3 X2 p" I& c5 @0 b7 M            49
- V# x0 C3 m2 b2 p( f# c            50& r- m) s% {; Y- i% F5 U; F
            514 ?# c, ?  N7 ^$ f  h
            520 w/ u/ m% p% y$ O( L) `
            53
  D% x: i3 k0 h            54+ `% Y9 O" }0 w6 \
            554 v: j+ T5 T% @& E, D  x) H
            569 O  g7 s. D2 P
            
                        <?php, c4 m% |* ]+ d( y3 X$ q/ _
            class inload1 x2 q; d2 M3 l" X0 @( F! g
            {9 t; T3 W# o8 [
            /**
7 D! h. R9 c; B# E; Q  M            * 类自动载入,不需要由开发者调用
% R( W+ \# L" ^. }# E4 @3 `+ z! n0 M4 _            *! m/ S4 s* z- H7 p. q3 v; o; V
            * @param string $class 类文件# J/ J4 B9 f- {
            */7 ~% k3 Q' ?, ]1 R! g$ q; F# T. r3 F
            private function autoload( $class )* o+ Z9 M3 Q. c8 L( g
            {0 ^# S7 R. _/ \4 l- u
            if(  empty($class) )1 `* d, n% d) Z2 w; c; M# [
            {) v) y: ]: ?: ?9 O( F/ d. X: B
            throw new qexception('加载文件不存在'.$class);
8 J4 m; `* k$ v+ a$ j            }% Z* D4 _. c# i* \
            else
3 p2 K& i; b. A" Y. r  Z" O/ g            {
4 E7 G' k/ x! Q' g            require _spring_.'/_core/springmap.php';  //框架地图8 o3 H! M) @3 Z8 K1 C
            if(!  file_exists(  $source[$class]['file'] ) )
% W, i+ G8 i: a2 \3 b$ V1 T, s: N+ H            {  S$ j$ n5 B0 q* F6 F+ A, ]
            throw new qexception('加载文件不存在'.$class);
4 w, j8 @2 S+ v' ]% C, R            }$ _1 q# A( {; k) d
            require $source[$class]['file'];5 t+ r5 p" Y/ L8 p3 M2 {
            }+ b5 N; J; _5 K) o( l
            }
1 L- t: D2 T! }- {2 l; E( J/ [            
9 Z6 b& D6 H6 p- M% ]" T            /**3 s. `+ ?6 X) M
            * 注册或取消注册一个自动类载入方法1 A% l5 k7 v  r4 e& p
            *
+ l6 O; W8 V! `  K! P            * 该方法参考 zend framework
4 j! g, T  p8 |4 ~2 N" ^            *. P- h- v. ~2 _4 A
            * @param string $class 提供自动载入服务的类
: k* w: ~: H# e: G4 W" R( H2 o            * @param boolean $enabled 启用或禁用该服务& B  {. G3 ^9 N2 H. Q" R- J. b
            */
3 n9 c9 [% a3 V6 z, R' _            private function registerautoload($class = 'interpreter'  , $enabled = true)0 W# Q" d+ g- y$ F
            {" l" x: j! I) i5 D: f; n
            if (!function_exists('spl_autoload_register'))
2 a5 U3 i3 R$ h& `$ ~! h$ c0 N6 L            {
) n9 b, b5 ?2 Q. |            throw new qexception('spl_autoload 不存在这个php的安装');
; x% _; v1 e9 b- V0 L) n            }  e, u( R/ R. d' ?
            if ($enabled  === true)9 u! G& m" w; L7 S" i* a: j
            {
% K( E. Z! F. N& F1 r8 k$ K            spl_autoload_register(array($class, 'autoload'));
. J2 w/ P# x. }+ d6 p5 \; l) ^/ o            }
" K9 a( l1 C& ]9 Y0 \* a5 O" ^            else
1 }, {! _4 Q+ {5 J& H/ q# s            {& |$ ?* o0 F% P4 [* Y: Z5 ~! M! h
            spl_autoload_unregister(array($class, 'autoload'));% n: d; L4 ^! r  g
            }! y) \8 k& `' Q2 ?2 @! ^9 M
            }
9 O1 A5 t! r/ I& e+ {            
: h/ w+ Q2 U* x. r. ]& A, o            /**
9 ~6 \0 K  X4 g: G            * 析构函数, \  c0 ]3 I% U# ^* f7 o
            */9 R1 J( y+ u9 ^* C3 a. v- q$ C  F
            public function __destruct()/ n6 `* y/ @3 V: {! z3 `
            {
# X8 l, _) Z9 P5 g4 c: y            self::registerautoload('interpreter' , false);% q/ N% o( r8 S( m! ^& s
            }' x! g9 ~1 {$ l0 r9 t
            , `8 ~, }6 C! a; x8 b& t* Q
            
  以上所述就是本文的全部内容了,希望大家能够喜欢。
5 ]9 J; d9 p, t( W& g2 N$ r更多网络编程信息请查看: 网络编程
作者: bqtklouu    时间: 2016-1-30 15:00
做为老人!在吧里我都懒的都不想说话!送完经验我就走!
作者: wwdu926a    时间: 2016-1-30 15:00
我在顶贴~!~
作者: GoodyFouppy    时间: 2016-1-30 15:00
本人在此留言均为网络上复制,用于检验本人电脑键盘录入、屏幕显示的机械、光电性能。并不代表本人局部或全部同意、支持或者反对楼主观点。
作者: bqtklouu    时间: 2016-1-30 15:01
其实今天baidu 又 抽风了
作者: Acropozelan    时间: 2016-1-30 15:01
cd:遮~~~~~~
作者: wwzcdenleclv    时间: 2016-3-20 12:41
还呕像.....
作者: tohme    时间: 2016-3-20 12:42
相比他连说拜拜的 想法都没了 哈哈
作者: Mqokjdvq    时间: 2016-3-20 12:42
楼主,你要继续努力啊!你是bbs的希望啊!你是网络文学的希望啊!你是整个网络界的希望文学界的希望啊!你是整个人类的希望啊!你是整个太阳系的希望啊!你是整个异次元空间的希望啊!
作者: buingeEvineus    时间: 2016-3-20 12:42
综上所述,恳请各位官员请勿动用武装力量请勿跨村、跨镇、跨市、跨省、跨国、跨洲、跨星球、跨银河系追捕。确因不抓不足以平民愤,或不抓就领不到薪水养家户口的公职人员,建议携带工作证
作者: Mqokjdvq    时间: 2016-3-20 12:42
我刚来~~~嘿嘿~~此声明最终解释权归本人所有。




欢迎光临 得知互动 (https://bbs.dezhifl.com/) Powered by Discuz! X3.4