关灯
开启左侧

[研究发现] php 类自动载入的方法

[复制链接]
swmozowtfl 发表于 2015-7-28 11:32:39 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
  在php5之前,各个php框架如果要实现类的自动加载,一般都是按照某种约定自己实现一个遍历目录,自动加载所有符合约定规则的文件的类或函数。  当然,php5之前对面向对象的支持并不是太好,类的使用也没有现在频繁。 我们来详细探讨下吧。0 e. C9 y; g2 q' h
  php 类自动载入方法3 Z1 A3 e  o8 k# T) w
  ?
+ M, d2 ^* c% t! h7 h9 j: e; H
            1
5 W/ l* o1 i) p3 @; u  L5 Q# [            2( N4 Z4 [  s9 ~) i& T* r1 r+ a# A% Q
            3
: s7 P" U1 u7 r( \$ Z" Z8 w            4
4 E$ h' d0 V- l  P            5- @3 n. ]% r& ^. r0 L. }
            6
. `/ m/ V/ L) A; c: d8 f$ q/ N- [( K            7" e8 C" X* G$ i5 e
            8
1 T$ y" X0 e. ^6 Q            92 Y1 n4 q' B/ m# t! ]% P
            10
# i, S" Z2 X1 l* @) e! g            11
" s; j8 L3 V' [% X# @1 n3 z' ?8 x            12
4 R/ q6 x6 B6 {2 L6 j( M) E            13+ o' u3 g8 S& a& U$ _. J% W! w
            14
/ Y! t6 `$ t1 X0 _            15& }$ j; D# [7 w
            16' x; k" B$ f) a- ^8 |
            17, v4 h7 d) u' s9 X/ ~! M, Z
            182 L5 v8 c' B" Y/ p* a$ A' d
            19# g. _! N; S  u
            20
$ `: J( C9 Q% t# z2 m5 `            21. y) r2 A3 m; ~, I
            221 |$ W# w9 O6 a" n0 V3 |
            23
  [# M* d( D' J' S! {            245 W6 O$ e1 }) E$ s! k
            25( w* |+ Q" R3 D' d9 F$ A5 @2 [
            26
+ J( Z! P7 S/ M* M* N            276 K6 i# h: `) [0 }1 g/ [, n
            28
$ u6 o/ j2 F" J  Q# u            29
1 A$ V: L  s) x6 F            302 o8 z4 _5 s6 g2 S4 E% h
            31
$ {3 u7 t  r( F5 I) J6 {            32* }. _' i) K4 `; a) d1 o3 w' r+ T
            33
8 W" y/ {5 s7 Q. l3 B! u            347 |& q" @5 \0 ]+ k
            35
3 a) B2 H. ]3 \* Q3 }            36. O$ f3 z+ N" B# E
            37! J' `3 T/ U) A6 ]8 g5 \
            38
$ W2 K9 Z/ C, l) @0 q( N: w            39
8 a+ c6 l, Z7 K: v9 G            40
4 Z8 Y8 A, e3 M4 q+ M0 j; b1 Q3 ?- {            41
5 [: T% r: i+ q; I  g) O0 Q; A            42
' g0 |& w' f; t3 J) K2 z            43
; S- p. N7 l9 ^$ q  a) V            44
4 u7 U0 N' ^0 s) l% l$ q            45
* k- @" @7 C, m. H# Q' x            467 T5 ^" w! p8 {6 G) J6 m
            47. ?0 |4 e6 W1 v8 F6 D3 w* O# x& x' l% M
            48
4 F: l2 d$ e- `1 J            49
1 `2 U% K) ^$ t            50
/ O& }! g$ l' \* W1 a  ?            51( H6 K' o$ \; g
            52! |& [2 S5 f% k, E$ f7 B
            53
* {" V1 f/ z! U3 q  w, p            54
7 V- i4 V5 k4 i$ T: w/ b            55$ F6 y& W' v1 ?6 y
            56+ v. k0 o  p" a
            
                        <?php' ?& w6 q3 \" U- J; D" Z
            class inload$ B, l( s/ n' S4 i) h' H
            {' X9 D* g& e/ G/ h4 m! z
            /**
. y1 g! \! D' B3 R: I" R            * 类自动载入,不需要由开发者调用: L* X6 O/ l0 B0 D, g
            *2 I& a- b' W- C/ w, J) c# y5 d
            * @param string $class 类文件- W! E& ]; Q8 H& y
            */; t$ L& J; p7 e4 I2 B4 z
            private function autoload( $class )
* K" P1 Y( d! L1 o8 i- S, E            {
, [3 J. c* A" U0 k# f" K3 [            if(  empty($class) )/ J+ i1 F0 f* U% {0 ]! \; _+ N* P
            {
; d* U- n) u3 C+ P/ w            throw new qexception('加载文件不存在'.$class);
9 l2 T, V$ P- t* H, x, f            }9 t* M) G  b4 d6 j0 Y0 S. ?
            else
) z  e5 C- `8 o7 B2 i: V+ ?* v            {
+ U8 \- C% }8 D- b4 w3 G            require _spring_.'/_core/springmap.php';  //框架地图0 s( ]1 Z; J' s% w7 H
            if(!  file_exists(  $source[$class]['file'] ) )
* q( ?" d+ A; |' ~5 l. i3 @+ G# x1 n            {3 c, g1 x4 L4 l: Z: j6 M
            throw new qexception('加载文件不存在'.$class);2 M- L3 G& N: H
            }
2 v; Q, m$ [0 @# |0 @, C& T( `% a            require $source[$class]['file'];4 p+ S9 F# r8 I; b9 A
            }
8 X; ^6 G7 I, p' \& X4 t% ~! r            }& H  R; K; Y- T5 _6 H/ f$ S
            
1 ?6 P, [" _0 y/ W* T, U+ A  O            /**
6 b0 p) V$ O% @7 O- a1 ?) o            * 注册或取消注册一个自动类载入方法- X) I6 L, E# U- _6 e/ M0 J
            *& c4 @/ R% b( E* T+ I
            * 该方法参考 zend framework# u7 L/ d7 S6 |
            *6 F1 Q$ e$ Q% D) d  e
            * @param string $class 提供自动载入服务的类% M7 m$ C! t" c, ]1 y& u
            * @param boolean $enabled 启用或禁用该服务2 [# n3 G. P: ~  Z0 H: Z- [
            */! M# ~5 V, v. \5 X
            private function registerautoload($class = 'interpreter'  , $enabled = true)
5 |) ]& C# Z* v2 g; I2 I            {
% A- Z9 B4 t/ V2 w% Y. y) B            if (!function_exists('spl_autoload_register'))7 l$ ~, R/ S' U( m+ L" i
            {0 D0 L! Q  j3 e2 F
            throw new qexception('spl_autoload 不存在这个php的安装');3 C, Z7 V9 z/ ^$ B1 ]& ]+ K7 f0 g
            }* N' ?0 a  r" @: t- X" ~
            if ($enabled  === true)+ P, r8 n) ^( a3 j. t3 K$ e
            {
9 B5 _) M) F, H0 R8 c/ s$ b8 l            spl_autoload_register(array($class, 'autoload'));, G" J) ^% N4 m6 X: W- o, f
            }( P8 X; T0 E3 n' Z/ g* c# C/ Z3 T) {
            else
8 n* p* M  R/ b' S) C0 Q" I            {
: j+ e4 I' Z6 O0 `# R5 m/ N            spl_autoload_unregister(array($class, 'autoload'));/ {- Y2 ]3 ]# v, k6 V, X
            }) I$ Y8 s( _0 D" |
            }, i3 ?$ P$ I; F& e
             ; y, d. E6 W. h+ E/ P# Y2 b8 _3 D, R
            /**0 z6 V5 x  s+ D+ n( K" J
            * 析构函数
3 h6 z' r+ l4 `/ z; }, r            */* s9 Y$ S- D! ~- f9 Y" N7 ?1 [
            public function __destruct()
4 n: J+ I+ |! G* |* k1 \1 S- I            {
. u' K0 A- j7 ]1 B+ M/ `6 k7 n* I/ y, x            self::registerautoload('interpreter' , false);! e% t9 _/ i% o  V- X& G7 ~
            }
' Z1 }8 I* P3 L0 m            1 [5 G9 m3 \, D! y
            
  以上所述就是本文的全部内容了,希望大家能够喜欢。2 Y6 C; `2 o/ o; }
更多网络编程信息请查看: 网络编程
 

精彩评论10

正序浏览
GoodyFouppy 发表于 2016-1-30 15:00:55 | 显示全部楼层
 
本人在此留言均为网络上复制,用于检验本人电脑键盘录入、屏幕显示的机械、光电性能。并不代表本人局部或全部同意、支持或者反对楼主观点。
 
bqtklouu 发表于 2016-1-30 15:00:29 | 显示全部楼层
 
做为老人!在吧里我都懒的都不想说话!送完经验我就走!
 
wwdu926a 发表于 2016-1-30 15:00:51 | 显示全部楼层
 
我在顶贴~!~
 
Acropozelan 发表于 2016-1-30 15:01:32 | 显示全部楼层
 
cd:遮~~~~~~
 
bqtklouu 发表于 2016-1-30 15:01:12 | 显示全部楼层
 
其实今天baidu 又 抽风了
 
Mqokjdvq 发表于 2016-3-20 12:42:22 | 显示全部楼层
 
楼主,你要继续努力啊!你是bbs的希望啊!你是网络文学的希望啊!你是整个网络界的希望文学界的希望啊!你是整个人类的希望啊!你是整个太阳系的希望啊!你是整个异次元空间的希望啊!
 
Mqokjdvq 发表于 2016-3-20 12:42:58 | 显示全部楼层
 
我刚来~~~嘿嘿~~此声明最终解释权归本人所有。
 
buingeEvineus 发表于 2016-3-20 12:42:52 | 显示全部楼层
 
综上所述,恳请各位官员请勿动用武装力量请勿跨村、跨镇、跨市、跨省、跨国、跨洲、跨星球、跨银河系追捕。确因不抓不足以平民愤,或不抓就领不到薪水养家户口的公职人员,建议携带工作证
 
tohme 发表于 2016-3-20 12:42:01 | 显示全部楼层
 
相比他连说拜拜的 想法都没了 哈哈
 
wwzcdenleclv 发表于 2016-3-20 12:41:35 | 显示全部楼层
 
还呕像.....
 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


0关注

1粉丝

2503帖子

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

关注我们:微信订阅号

官方微信

APP下载

全国服务Q Q:

956130084

中国·湖北

Email:956130084@qq.com

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

鄂公网安备 42018502006730号

  ( 鄂ICP备15006301号-5 )