关灯
开启左侧

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

[复制链接]
swmozowtfl 发表于 2015-7-28 11:32:39 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
  在php5之前,各个php框架如果要实现类的自动加载,一般都是按照某种约定自己实现一个遍历目录,自动加载所有符合约定规则的文件的类或函数。  当然,php5之前对面向对象的支持并不是太好,类的使用也没有现在频繁。 我们来详细探讨下吧。
' f- k" _  q) o" E& m  php 类自动载入方法
, q* Y/ ?; O: O% T/ L; `1 B% g  ?
; V4 `* j4 U2 H# a8 L
            13 r  K6 N1 w+ y( G7 }3 ^; o
            20 D9 ]8 x% l, `
            39 p+ g, `0 l% g7 A+ K, ]$ D
            45 r/ ?5 B8 y2 q$ F# D' {
            5) m, [9 l( \' L2 Z
            61 ^/ S: o1 \6 [3 b, O- i
            7; R5 n$ H" H5 G
            88 j+ D3 t3 T7 S' j& K$ n4 d
            9+ s$ [; {4 r" a7 H( h# f8 T3 V! T
            10) G% h$ k, _/ `0 d# K" |$ i
            11
8 |: ^, e4 ]; K& B) l, u8 Y5 s            12' z% U" _' R3 }  w
            13, v2 W3 f) ~8 z) n6 p1 `4 p# X' l
            14
* {, [. a5 }2 m8 L( a/ E8 V. T: B            15
/ I" p+ d* s4 S            16
" k6 M5 T. `! y( B            17
: {5 d) O$ [6 ~' c3 c+ M- d            18: N4 g) I$ a' x8 }; k
            19
1 p9 X+ H1 _2 X" u$ G) E& X2 E            20
* M" ]8 B/ |/ Z1 N/ \4 F            21# I6 [" r& G7 [/ X
            22
$ B  K8 N4 r5 c% B2 u* U' o' i' t            23. g) X; a6 \( k% m$ r
            24( t; p7 X* v# i" D
            25, t) P# C/ l/ x' h6 ?) L, [+ ]+ V
            26  l- i# o5 u% n, N
            27! o9 [+ i9 a1 Q
            28
- k9 Q' l0 c( X            29
: G. k2 A5 Y) k- K8 B4 J, c7 ?5 a. t! o            30
& }- R: K7 R. j9 ?( h            31
5 O/ ^7 o& g: k& x: c$ b0 j1 A            32
3 M0 d2 z" F- J# ~  R) I' V7 ?            33
% q5 J- Y2 h( [; M3 }            34
: b; ~2 ?+ r. T5 t; o/ L! B, H            35
% ^$ M4 F, c9 a' V            361 l; }- ]7 B" ?5 \1 H! P9 l
            37% L) J$ D; ?" x8 J+ q2 i6 \
            38
; k: p, @8 l: g( _. \' `7 K            39& x+ e+ L' n7 [
            40
; h9 M$ v" N! F7 _3 E5 s% w: s            41
+ h( U# I; i# a: X! i3 k; s            42
+ ?$ U) \7 G( P9 P5 M: x, {            433 b+ |& q  r8 j/ @- h: H
            44
* T) c* v- ^0 v  B            45! B3 o: n% \, f! ~
            46. m# U* n2 t3 E: ^% A: h! a
            47
4 m% l4 O8 H2 N            48
3 @+ y' c& Y1 o) w            49" x! l. O; W  O, ^+ U; l4 a
            509 y* G9 `' h( X+ _* J0 s- e
            51
) m8 n& E5 @1 }1 z, m            522 ]7 S; c% h! W+ K2 G7 {# Y
            53* _$ t# y/ ~, A/ g2 z. W
            54
6 d( }& B/ r$ L" ]. N            55( N+ @( W' ]6 G% N' A
            56
& \6 \$ W  b  ^: X# O            
                        <?php) }9 `/ B* N* a) `9 Q0 |7 V) O( e
            class inload
1 N8 t. O! D2 N, ^. Q% s3 G            {: w' `7 f- @; O/ m4 b
            /**
* V9 M% \2 y' }) W" E. @            * 类自动载入,不需要由开发者调用
% v+ ]  f( e2 r" a4 Z! R/ l            *- Z- y6 v4 K! e; c, ]* n& D: H
            * @param string $class 类文件
3 ^% r0 F; z$ }" N2 C            */. I/ L8 i- o: H. l
            private function autoload( $class )2 v/ |9 i0 p4 ?" F& F. g' n
            {
  A8 ?1 @# X  ?$ [$ A7 j* F            if(  empty($class) )8 V0 u6 z8 Q: T# {, @1 P
            {- f4 z: d5 E6 W+ Q. z
            throw new qexception('加载文件不存在'.$class);
$ S/ r0 R9 C4 o" c/ C) ?' E6 _            }1 x# t0 P3 e+ d! T* \; A& x
            else
+ Y/ B' \. B& N. B7 Y            {
5 a4 A$ G$ F! x4 R0 Y0 ~            require _spring_.'/_core/springmap.php';  //框架地图) x% K' t( d/ @+ Q5 d0 r
            if(!  file_exists(  $source[$class]['file'] ) )# v0 q# E4 ~5 b" D; Q
            {( V8 o$ o( X; ?' i) t5 m  a% N0 o2 p+ \9 ~
            throw new qexception('加载文件不存在'.$class);
0 S0 r3 r2 ^0 M) P2 b) O            }& p/ @8 b$ F1 C7 W2 A! {# H
            require $source[$class]['file'];# ~3 d% v/ s. B# u$ n
            }# j5 B9 W! ^! y8 D5 l
            }
% y4 t+ ^7 L* [5 J            
0 m( D# G( i/ s# v" |6 z! f            /**7 j  `3 x6 c. h, h& v
            * 注册或取消注册一个自动类载入方法) c' {* o* [  b: U. d" h9 l5 k
            *
# j. ~3 M9 o! B* B# U' T2 e            * 该方法参考 zend framework: c, B1 o. F' |" `. M) I. f$ N
            *
" B: u; n8 I# b) O2 q            * @param string $class 提供自动载入服务的类; G, _0 Q5 V2 z; I6 h5 ~+ y
            * @param boolean $enabled 启用或禁用该服务
, f4 L$ C$ O) m  A+ W            */9 ?' j  f9 H! }% \/ ]) w6 I+ I! A2 o
            private function registerautoload($class = 'interpreter'  , $enabled = true)7 d0 B) V( C4 c
            {
# E* \+ ^6 Q5 k$ J9 D( e            if (!function_exists('spl_autoload_register')). O$ l* |' H- {  Q3 X: r$ m1 \6 i7 y
            {& C5 n) M/ X" X3 K+ ^5 G# \+ l' _
            throw new qexception('spl_autoload 不存在这个php的安装');
* r3 e& f' s% d/ ~) b            }, w& k" n2 V- ]8 o% `
            if ($enabled  === true)) ~+ j) V  q  o5 |* K' p/ m! B
            {4 I+ `2 k) C/ R4 o) R
            spl_autoload_register(array($class, 'autoload'));3 @5 R% F! `' Z/ R* u
            }( M- `  x) D: Z0 H2 N
            else+ Z- n# a1 r- A5 |  w
            {* g9 Z5 z6 }: t8 J" D4 `
            spl_autoload_unregister(array($class, 'autoload'));
6 h, k' z# v- V$ L2 j$ l            }
; @! Q8 @8 S/ t* k9 U3 M$ n" g* }& {            }
  e/ C2 k" r7 q3 i7 n0 {2 m$ X             / G; x4 N, \, F) h
            /**2 y$ D% V1 Q$ K' Q4 t2 s
            * 析构函数+ a' R" K. b( H5 R0 N+ K
            */
) }+ i+ [5 I3 }  S! @            public function __destruct()
6 ~  X! z* p; Y            {
2 R; ?8 Y# K0 ^/ ]8 |; }& l% K& k/ {% S            self::registerautoload('interpreter' , false);
$ M* W. y! H  m% X& ?) u9 U) n9 O) z            }
  I* r" }; K0 j- N* J2 W            3 Y0 F6 U) x) A* j
            
  以上所述就是本文的全部内容了,希望大家能够喜欢。. _" _) C8 v8 L' ]# r: E1 C9 D
更多网络编程信息请查看: 网络编程
 

精彩评论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 )