返回列表 发新帖

php 类自动载入的方法

567.3k 10
swmozowtfl 发表于 2015-7-28 11:32:39|湖北 | 查看全部 阅读模式
  在php5之前,各个php框架如果要实现类的自动加载,一般都是按照某种约定自己实现一个遍历目录,自动加载所有符合约定规则的文件的类或函数。  当然,php5之前对面向对象的支持并不是太好,类的使用也没有现在频繁。 我们来详细探讨下吧。
! \# w+ ]% x& A1 J( X+ M& @! M  php 类自动载入方法
4 G% }4 P3 E0 |$ X  S- l2 M  ?
+ C: H% L, b8 }
            1
% W$ o8 C' f8 d/ E  B5 y! Z$ T" y            2
- h1 C9 o' l  c- V1 a; {- G1 L  u. }            3/ z, N( h4 y5 m* ]0 T
            4+ ]6 q* [" S, @# a( b9 v8 @
            5
4 N9 o$ W' y, r. {1 Z            6/ |: V) C; o, U' R" G4 r6 l1 g. E+ o
            7
. H5 H/ z5 ?6 I( j+ s: P            8
. e' ?8 T0 q+ T4 E" @  ^3 x            9% i9 b1 S/ d; B+ ?% z8 o& e
            104 H, `, @# F. y
            11
% Q! X% ^! S$ {            12
) X  q5 m# K1 s            13
/ F3 l& f1 F# ?9 V3 v. a- S            14
) H$ k1 M! j# s: O            15
1 B% j! k: X: ]+ W! H; b/ T            166 u$ q' c3 L% j  z1 C; [
            17
2 _7 Z' J. m( l7 u2 k            182 c  s! B, b  g* ?* W" P
            19
8 q2 K1 O9 U  V1 s- w) u            20
( P2 g5 a+ _4 b4 ^+ B: p            21) Z) j* I- M! L
            22
  c2 P8 R3 z& i1 O! }5 A+ k            23
# M9 A5 k  p: @. |/ n& O6 n            24
' j. H6 v7 x1 H# h+ T            253 t* v7 G2 V- Z4 {1 k, a4 J+ Z
            26; D( w. Y5 x: E, @9 O/ t5 X
            27& l8 P9 E7 J9 x# w% Q4 [
            28
1 G4 P, d" A7 Y( r6 N. K5 _            29
, L, S( d) O' K* g            30
' E0 B/ ]0 C7 B) i            31
9 O& e# G& O6 y6 X0 \2 N2 T! {- P2 i            32$ M3 }4 c% T* [5 ?3 W
            33
$ u5 p5 B( y. V$ G- D) S            34
: U$ p7 J* c4 q7 U4 T& ]8 t( i( Z9 h            35
8 v% w6 m, t! z            36
, [% Z" F" R: M2 i/ h: ?            37, p3 l8 K$ j. k0 r% _0 \( Y
            38
) E. z, K) F. w$ n& F+ x4 H' |            39: X; G/ k% w& k6 R
            40+ k, r$ a- k1 j) y- X. l
            41
4 V1 m* O8 S0 {+ {            42
7 t. n  G& J: r8 e# Z6 A  n            43. n6 N8 n* Q1 U# p3 F9 p3 j
            446 `2 T" @" [7 F" ?- v2 m
            45  x# [3 }$ s" H6 k" X1 A6 g
            460 N0 U0 h1 b/ t: V2 N4 w1 g  H
            47
% g% ?; Y/ @, d# r4 Q            48! f* B  g7 o0 _- H. I$ L$ u
            498 X8 E) X+ c( Z1 X; e+ I' o
            50" K6 r  }6 M, N& W9 }) O
            51% n' ^! T& `/ F, \+ O! \1 g
            52+ W1 `5 K. J( d5 Q
            53
' l; H, ^) {* W# }            54
( r; G- U; i. s            55) X: ]  R' L' g5 U' b, R; c3 H" A
            56! W0 H, w- t- Z! U4 j( T! i8 N
            
                        <?php
* u: d: e1 w0 ]% b            class inload
9 }) V! V2 t* H& `" c+ Q6 Y. n            {* O* z9 c$ m  Q: Q0 u& F1 H8 w5 W
            /**% d  o& m. ^' H0 ?8 E, I# T* G
            * 类自动载入,不需要由开发者调用: Q1 I* }) w6 Q  T' L4 M
            *! S" c" t9 ~! A4 F3 e% c
            * @param string $class 类文件
+ h: l8 v5 r2 V- s! G- L/ v            */: |$ x# d8 R) _$ ~3 H$ h. |
            private function autoload( $class )
+ l' s2 K; Q) x! N' W1 h/ ]; \, H            {/ R. t* e2 L" n4 t, |
            if(  empty($class) )
1 n1 j& G2 @  F1 X' }9 x6 a- ~            {' }1 x. ]( |+ S  X
            throw new qexception('加载文件不存在'.$class);4 x- `; V' I7 R0 l$ {& n4 x! G% }  a8 R! Q
            }
6 b- N6 c* n, s) n/ v; |4 q            else
- p. t) Q9 J2 e+ I  c            {( h! }8 U1 X% a; s
            require _spring_.'/_core/springmap.php';  //框架地图
, C& M1 l) O1 S8 f+ S) I, j            if(!  file_exists(  $source[$class]['file'] ) )
0 M& n8 a* B. X( L; p            {8 ^$ ?9 t3 `5 Q1 k3 |9 z' k! s
            throw new qexception('加载文件不存在'.$class);2 G! \) h' F6 r& {
            }
0 i/ M! s+ z7 E& @            require $source[$class]['file'];
3 b  k- G! q$ @( g7 a* i% q; V            }0 C9 ?2 D; A+ L1 P8 d5 t* F, m
            }: b2 j; [" N. j: @9 `# k4 C
             / P9 q% z/ W6 P4 X
            /**8 {2 }" H, q- h: {. e' q* Q& q
            * 注册或取消注册一个自动类载入方法
: G- J( l3 Q- ?: ]: M3 J            *, w: c! B4 k6 x5 _, ~; X) d
            * 该方法参考 zend framework- O) Z8 h. @3 J7 B+ g0 Q
            *
% s5 L7 V+ x5 ]9 m            * @param string $class 提供自动载入服务的类
6 Q1 G! {6 l( H1 i            * @param boolean $enabled 启用或禁用该服务
0 J+ E# t' o! E            */
& d9 f/ C3 H# k8 U' i/ a! B- x; ?            private function registerautoload($class = 'interpreter'  , $enabled = true)6 p2 P% R- C( c6 r
            {% Y8 u: e7 v* S( @
            if (!function_exists('spl_autoload_register'))! F& o3 f2 N$ u9 }8 }; z! \- }
            {& I( u% q4 f+ t3 _) _+ {" B
            throw new qexception('spl_autoload 不存在这个php的安装');
0 J3 [: o7 s+ h8 q            }4 G# ^# a# O& [% C
            if ($enabled  === true)) S  W2 g/ @* D& G4 p8 p
            {
# E3 Z! ~- ~" O2 u            spl_autoload_register(array($class, 'autoload'));8 ^* ?2 Y/ v7 g0 f, t
            }8 h2 M. p& E& V
            else" @  g) B: X5 \* K; ^4 C
            {
2 F7 u/ [! M* [& d            spl_autoload_unregister(array($class, 'autoload'));
6 A% @8 [* v1 J4 W0 ~; ~            }0 ?- e  f  m) d8 w9 a+ i
            }
0 V+ z; y* V) \) y* Z. U1 l# q8 T4 O             " H5 I( b6 V; R/ r2 J
            /**- Z, w3 k% z  n9 J7 D$ ?( g
            * 析构函数% [1 F- ?3 \5 D, K2 V5 t
            */
* o8 W  k/ \: j! j            public function __destruct()$ R8 q. ^+ e0 N* c+ n
            {: d  p* O, z+ ?8 W) I6 S
            self::registerautoload('interpreter' , false);
- H4 ]6 U0 `; g$ |            }5 q* [. i3 G7 N, J# g* S- m
            6 t5 z: F! p/ ~. m. N/ F
            
  以上所述就是本文的全部内容了,希望大家能够喜欢。
4 v1 `% ?* ?) k+ j7 q8 L2 j更多网络编程信息请查看: 网络编程

回复|共 10 个

GoodyFouppy 发表于 2016-1-30 15:00:55|Reserved | 查看全部
本人在此留言均为网络上复制,用于检验本人电脑键盘录入、屏幕显示的机械、光电性能。并不代表本人局部或全部同意、支持或者反对楼主观点。
bqtklouu 发表于 2016-1-30 15:00:29|美国 | 查看全部
做为老人!在吧里我都懒的都不想说话!送完经验我就走!
wwdu926a 发表于 2016-1-30 15:00:51|INNA | 查看全部
我在顶贴~!~
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|美国 | 查看全部
还呕像.....

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

得知互动是一个融创意、设计、开发、营销、生活、互联网于一体的专业交流分享平台。
Copyright © 2026 得知互动-专注Ai与站长技术交流社区-Ai交流平台 版权所有 All Rights Reserved. Powered by Discuz! X5.0 鄂ICP备15006301号-5|鄂公网安备 42018502006730号
关灯 在本版发帖 扫一扫添加QQ客服 返回顶部
快速回复 返回顶部 返回列表