得知互动

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

作者: swmozowtfl    时间: 2015-7-28 11:32
标题: php 类自动载入的方法
  在php5之前,各个php框架如果要实现类的自动加载,一般都是按照某种约定自己实现一个遍历目录,自动加载所有符合约定规则的文件的类或函数。  当然,php5之前对面向对象的支持并不是太好,类的使用也没有现在频繁。 我们来详细探讨下吧。
6 ?- s# v. \6 G8 i. @  php 类自动载入方法
- A' F3 H$ x. O9 E4 q: m  ?
0 X- `0 \& o* i/ J6 V& T( h
            18 `2 [# \2 C8 o. g
            2
3 `- ^  L1 Y2 d* M$ ]- a9 Y1 L            3( a5 L6 ]+ b5 {$ i
            4  ]8 m. B* ~6 X. u  g+ {
            50 X: F2 `8 b! g2 i
            6
  `  ?- N" A8 t8 L; ~            7+ u% [( j$ Y, [! u1 w& b( V
            8* t2 p7 `6 E5 W: |
            9
! C/ t- ^: w1 a/ h) a( Y            10! O; [2 u3 e5 s/ Y1 _; m+ O2 U: a
            11
, U. r) S: k1 C' Y- J2 d- k            12* Q% d( ]' K8 C/ Q& j2 p% d
            13
+ |" i3 Q. S% q            14
8 ^1 r4 s$ C' ~# T: ~            151 s0 K/ y3 v+ [5 K- y
            16
- A3 h; P( |2 [9 D. M% S0 R3 e            179 ]2 q7 u5 ~/ x1 u1 N$ i
            18
) m' a( b% `: Z1 W" b; n( O            19
+ P: k( g+ a9 c+ J: N            20
1 o$ b0 o  @) f            21
" J3 t& m- P4 f( G            22
/ F3 L* P- W% L7 @1 c            23
6 L8 ^  E" W- y            241 k0 R& i  l: P( Q4 _& ~
            25
  D0 ?5 {7 Q" C  ?. d            266 i* F" k- @- X1 x4 a; y
            27
" E% \, W3 W0 ^8 P9 B            28
- u" \' V$ _  N9 D  n6 M- x            29( \; e) |, d: [3 Y; @
            30# q! ~* X( S6 W4 ?
            31* q+ D5 t) {% U5 z3 i* D7 n2 r
            32; c7 h5 x$ d" Z. K% b) j' m
            330 o6 t) z! S$ x% s
            34$ \3 ~4 A! l1 {! f6 R+ v
            35
( r. n* `% ?& ?" e2 m/ R2 C. Q            36! @2 m4 o" T+ W- @% v& _+ u
            37$ _9 E3 \2 S6 u2 T0 m/ [" F, s7 G7 Y
            38
' w- Z/ ~6 a  L: ]  q" a            39
. B7 q4 ^" }3 R# G, F' a7 ?/ ~            40' S* p! s3 c% H7 q" |& [* P# K
            41
1 U' ]1 e7 F& r. q# C            42
6 g7 s- I* v1 I; u5 W% y" m: H            43
8 f! S1 @( y  p  B" P& r            446 w- R+ O9 F3 |
            45
# o* ?& c" m- p2 d            46! D% {* ]9 Z3 v, `
            47$ n9 y  a7 W+ Y7 K8 E/ q
            48" {$ \: X# z/ O, D' @% Q, ~
            49
5 |4 B% V4 K$ }6 R            50
3 d) W* X! P+ M* c& G            51
1 O) K5 @3 y" z' g, u            523 @9 G1 d8 a. d' U% w, Q$ w
            53
5 r0 C9 w# x  u8 A            54
/ w) ?8 ]/ ^3 S$ ?            55+ _: X6 D$ G* R4 |& U; y
            56+ c- x- k( @! l. e
            
                        <?php8 {9 c. k6 f3 E" U! p3 Y: C
            class inload+ f4 }3 @+ k: A3 u5 d  w8 e( y
            {
. T- u0 Y% O* l5 L1 ^" L! f            /**) r( }7 [2 V0 g/ j1 A4 a0 v9 s
            * 类自动载入,不需要由开发者调用
5 ~) u- @3 a7 C! m6 \" g7 `5 j6 r            */ g6 f6 Y  H6 B
            * @param string $class 类文件) x, q: C% D% R
            */  m# {* g4 J0 A" ?' P) Z
            private function autoload( $class )9 d$ t: o$ z* m+ X
            {
8 t3 p# X% M. d" T! F1 b# a% H- ^            if(  empty($class) ): N% B/ G  b+ y0 Q5 D/ H+ f  O& q0 \
            {
2 n0 Y- ?- x. W! Z            throw new qexception('加载文件不存在'.$class);# o5 D) Z+ M. j5 ]# |( c5 b) `
            }. m/ G' g9 ?3 z( p
            else# z$ L7 s- d% H. O6 ~
            {
" I& o1 ~4 q. t            require _spring_.'/_core/springmap.php';  //框架地图5 l: q7 o2 {9 u( L& a+ E
            if(!  file_exists(  $source[$class]['file'] ) )
5 ?( e; b( \% I1 I) h. K# n2 v            {
; }' H% Y  `: J( W0 k) R4 u: @- l! ?            throw new qexception('加载文件不存在'.$class);
' g/ [+ a6 j. K            }
% u0 Z( m3 ^& i1 L+ K  T( J& u            require $source[$class]['file'];
% Y, y- E+ P3 h, B3 ]            }/ ?# N& O# E( V& I8 w" w2 R* n
            }
/ Z" l( a, D6 u, J: ~            
, j! f& {2 D5 ]6 F3 e            /**% S& u7 U' C% q! r( V
            * 注册或取消注册一个自动类载入方法  r. ^- X$ ]2 \( ?' n$ e; X& y/ s
            *( Z3 o* e5 r0 g
            * 该方法参考 zend framework
( L9 J# ?) B2 `& r            *
5 Q% E5 z! }7 Z) y1 q3 U            * @param string $class 提供自动载入服务的类
! O& v4 [+ N( V* S1 g( L) l            * @param boolean $enabled 启用或禁用该服务
! r" U& }% {9 X. V$ a+ L5 `) }            */
5 c( h' v6 h2 [9 v  a8 U% Q+ g/ B            private function registerautoload($class = 'interpreter'  , $enabled = true)1 d# a2 C7 V+ z% c4 g. Y- B
            {; N# g! D6 L5 \/ E* Q- u( t& W, h
            if (!function_exists('spl_autoload_register'))' H( q8 Q, o! U6 Y- F3 {
            {
, H, @4 `; Z2 b: i3 Z. n; c            throw new qexception('spl_autoload 不存在这个php的安装');
9 S* y2 _+ [- I0 e. _            }
- |  x& V: `5 z8 y# ?1 _* c            if ($enabled  === true)
. G% y/ p; B' y3 _( f7 p            {6 W, l2 g7 {* ^6 [& A
            spl_autoload_register(array($class, 'autoload'));
3 I7 V) i' c& k            }5 J8 m4 Z2 I- |; p. B
            else7 K; k0 _# m; |9 M. i
            {
+ g  b$ ~0 J# u5 o" Z            spl_autoload_unregister(array($class, 'autoload'));
/ r8 E) e' X! @  @7 p            }
+ W3 p: _' M+ P            }
, ^* o- o7 D/ [' \( o             4 w. m! Z( x7 l+ j
            /**
7 r6 ^( R. M2 b            * 析构函数
# G! W. _) p" T( U* u            */6 e* A, B4 n+ Z. j3 J9 q! n) z
            public function __destruct()3 v* o1 w8 {  _8 \* [
            {
$ h$ i3 ]( g0 k& i  ~            self::registerautoload('interpreter' , false);
- M% x, r2 e& R% I5 s            }
5 c$ ^5 }, U0 z0 s5 X' |: _  b# }" _            
+ M! @) {# V- c& B( C6 E- N            
  以上所述就是本文的全部内容了,希望大家能够喜欢。5 p7 `+ H7 b  e. F. i, h
更多网络编程信息请查看: 网络编程
作者: 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