关灯
开启左侧

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

[复制链接]
swmozowtfl 发表于 2015-7-28 11:32:39 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
  在php5之前,各个php框架如果要实现类的自动加载,一般都是按照某种约定自己实现一个遍历目录,自动加载所有符合约定规则的文件的类或函数。  当然,php5之前对面向对象的支持并不是太好,类的使用也没有现在频繁。 我们来详细探讨下吧。
- [! w. r( j2 ^' Q  php 类自动载入方法
2 c: l" q+ x* ?% `/ c% |  ?$ j: Q% H; k0 N* j& T
            1
) f: H) {; l5 F$ a# ]. B! j) a0 O            2
  h: s1 c" x4 _; m$ |            3. N# C; Z7 R6 c9 Q4 D1 p
            4
0 m4 @- t2 t4 {- A* w8 `7 s            5
( K7 z9 n" A" R' R8 |% l            6
9 G5 `8 }* o, @; O, y' g) O            7$ I  {8 ^0 T2 [* O5 d$ F0 H
            8
; `2 B0 c$ L! M- Y9 {/ c  F            9
8 A# J* C3 m" z" I/ {3 F3 s  u: p) u            10( R; d& C' F9 G( r+ Q
            116 |5 ~! l1 j, ^( m
            12$ L$ s# R! a7 l& X& L  x
            13
2 a0 |& x* c9 e. u7 E( m1 q2 x            14
- s" w/ F0 a0 T$ D            15
( Z' [, G6 i$ U2 d2 Q            165 ^8 n% G: q9 g$ n9 G' q
            179 @; P+ ?1 x6 z2 M$ t
            184 @+ `0 O* i6 q9 P4 V: c! b
            19
  y' ?" j* a0 E            201 }7 `. h. q1 ~( A$ J
            21& M* B" g. f* d# @; w
            22
; f( }* R0 n5 D/ R            23
& X' S- O3 v2 [4 M            243 ]  E7 w- }/ F3 S# V5 |! u
            25
0 c( t4 c: P8 l; n4 c9 _$ {' H            26! m* I- o" Z5 E6 S
            277 Q9 t; b% ^& L) ^/ L- i3 _
            28/ @2 R5 t: J% a/ b8 l8 P/ b2 Q
            29
0 o" D* w, ~9 _4 b: ~+ Q, ~            30
3 _7 X2 v$ ]" j3 q( ]            31
9 [! y1 w& }( L  X! k            32
$ J5 P, N/ q0 I7 ?) h" E* e            33
( j; Y+ x& M" q  D: C6 b            34
1 S! [* S& b& j. z& _1 h            35
0 R& V1 J' o  A3 W2 W            36
0 u. u! Y, s" S            37
7 \6 x( T: b! A. H  [9 G$ \( n9 B            382 D% \% P+ ]0 e- f3 W: R/ {. l
            39
9 F" @, v$ ?# ^. \7 l- u- e            40( n& h" `$ ~2 \' c7 g/ @+ h$ V
            41# r3 W8 Q  ^1 J& x0 m* ?; n
            421 y; d& x' _2 \7 ^
            43/ ~$ q$ W# d  Q" w" N5 H9 i
            44  P4 `# I/ z) u' G
            45& a* L, ^3 C, r5 l8 f4 J# D% M
            46* j6 P' F/ H1 R5 c1 B
            47
, o& ~8 C' [2 ~            48
2 a/ G7 y1 L2 b1 E            49
! L) |$ P9 P2 v( g/ p            50, l4 K( }4 G& p% {. r
            51; A* U! `: {( X: C; ~3 e5 N
            52
$ {1 A( R$ k" S! B: ~            53
0 Y# e; K- b* z            54
$ h, M' L  [1 H( l( Z* Y# U  x            55
, |- \/ x( R4 d1 j* T            569 z' I8 B# V& S4 f9 p( v* n" k! {
            
                        <?php
: J  y* [4 t$ v+ u* p            class inload+ X1 w$ N3 _/ Y" K9 D% D
            {
5 R4 D6 Z, T) O- y            /**
/ t7 t, d" {9 ~5 T- m            * 类自动载入,不需要由开发者调用
# o) V* f! ]" g            *
8 g$ z- |' O* |2 p. X) T; N* u4 s) J            * @param string $class 类文件( n' u8 m( ]8 ^' D& W
            */
2 m6 O' j7 U9 T; _0 o$ r4 d            private function autoload( $class )
3 t% n# g; ]( f5 E( ]8 H8 ^            {/ D0 r4 H/ l% p; P* i: i
            if(  empty($class) ). ^. J& Q, v1 J
            {! G4 e) D; P. i6 c& n
            throw new qexception('加载文件不存在'.$class);  w1 V, |$ z; |1 \$ @) {. U
            }$ k7 x$ m# G/ q) W
            else
" k1 d- H$ @1 H/ Q" U            {  V& D; j; W8 B! @
            require _spring_.'/_core/springmap.php';  //框架地图
8 H1 k8 S6 R0 Z            if(!  file_exists(  $source[$class]['file'] ) )
2 r. S" ]. q2 ?! {$ B            {
; f$ L9 }& U" T9 D0 |; _            throw new qexception('加载文件不存在'.$class);
! ^  q5 E; q8 W7 A4 n' k$ z( K            }2 ~1 l. y  P8 y5 V1 |
            require $source[$class]['file'];: a* m- l, e1 v7 B
            }; A( F- \  i2 M. I, f+ j) k% Q1 u
            }
2 ?1 T3 @: c: h( y0 }( l$ T  N            
" ^* _9 Q/ R' y' g. X! H/ f! N7 q            /**3 l+ u/ i! S3 h% P5 J
            * 注册或取消注册一个自动类载入方法
9 J' o8 K4 B' e* J. E( f6 i& c            *- v& m' p, H: r) Y
            * 该方法参考 zend framework
! b& H7 j# C& E: n) N) T6 P            *" W0 x0 `( C2 T+ v" I5 @
            * @param string $class 提供自动载入服务的类
' U6 o4 }/ ^; M& q            * @param boolean $enabled 启用或禁用该服务! p, g  K: U: @# i' r& A( M
            */+ v) P8 W! T# F1 e; S
            private function registerautoload($class = 'interpreter'  , $enabled = true)
& I  E" f' E+ u/ q- Z8 X  O) l            {
* E4 q2 }& Q% I1 G- M; U# H" z2 F            if (!function_exists('spl_autoload_register')); g5 ?3 J0 e* \, Q3 v
            {) ]6 ^! F( [5 J2 j5 l( a
            throw new qexception('spl_autoload 不存在这个php的安装');9 J( z8 [7 \) R2 t" S
            }
8 K. Z  N* p9 {. S) j+ g            if ($enabled  === true)
3 Y) [$ {3 U( I: b  @            {* T% z! Q: Y9 A; G) e
            spl_autoload_register(array($class, 'autoload'));
8 R0 B6 O" ]9 t/ I6 v            }6 t8 F9 o0 P4 I& ?6 T4 N9 P
            else9 A( ?+ S% {$ r9 _# e
            {
8 r3 \: |7 p7 n3 X8 @            spl_autoload_unregister(array($class, 'autoload'));
/ a" N! R+ K% t, N4 V            }
1 }+ A) X, y2 r* K            }" L! D8 y. j0 L4 a" @% P) W7 j
             . k2 D0 C. n( @& C7 H
            /**
8 N" y% h8 p$ ]8 t! [7 e& N3 V            * 析构函数# l# X  M) K1 D& N. I6 o
            */) V8 X* m; P$ c/ h/ a* L3 ~
            public function __destruct()% v: I! E& g: }6 c
            {, n4 F" @  m' U9 j; f1 Y" Q
            self::registerautoload('interpreter' , false);7 ?0 U7 S! B3 J5 f8 s
            }4 Y8 l* q: o; G" T8 C0 U: h4 R2 L
            7 |1 o. }- v# }+ {+ w
            
  以上所述就是本文的全部内容了,希望大家能够喜欢。
: Q: J: I4 ?" O/ w+ q4 w更多网络编程信息请查看: 网络编程
 

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