得知互动

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

作者: swmozowtfl    时间: 2015-7-28 11:32
标题: php 类自动载入的方法
  在php5之前,各个php框架如果要实现类的自动加载,一般都是按照某种约定自己实现一个遍历目录,自动加载所有符合约定规则的文件的类或函数。  当然,php5之前对面向对象的支持并不是太好,类的使用也没有现在频繁。 我们来详细探讨下吧。
# q) S% w$ C  H! c# T  php 类自动载入方法
# T3 b+ q. O7 x2 C' g  ?& y% C5 N; K/ O0 u' b; T. O4 K7 y
            1
6 {$ C( v) {# Q8 J' v) d$ ^            2
+ w/ y* S8 ?8 u+ v/ z  I& ?1 a            3+ _+ N) u; k- J: _# [7 F
            4
; a! l2 R& ?1 F, x/ ]            5, ^+ Y0 R+ K; d8 q7 x% \
            6
* P8 p0 ^$ a4 H& X; q& b            7
5 Y3 o7 G2 r3 S. Y            8
* \0 L2 |5 n! w9 k' K8 i            90 a4 j8 T! `  C/ v* Q; w
            10
2 _4 ^4 b& V* _            11
+ I. F/ L4 E& c; Y( X            12. r& n. ?& I5 B
            13
" o5 [" o5 e& T& \, }4 D            14
- a5 O4 H4 k/ {; C9 f7 R5 x- M  O8 p( B            15- d; t2 R% R$ l+ g+ r
            16
  B1 |5 K1 T, `+ w4 ?+ V3 q            17
. w* f& j! X5 ^/ V5 N            184 [- l) {1 _  _+ U( Z
            19$ l" A* K. M) g0 o. Q( Z% C
            20
1 \' h! t9 M# _. B/ T5 }. G% K3 n            21
1 J2 e* W0 U" a8 b1 R8 U            22
! k* w; G: `) w            23
2 V+ u) |! W: \( \4 K% D            24
$ I- M# K3 G/ B; S) }            25  u9 X. A' M5 r( O1 T
            26! j4 W- v8 \# T
            27; P: V1 A8 `. \
            284 l* @4 s# ?8 S3 t, R- H5 n, ^
            29
$ q( d* E5 H' j0 S9 R  u            30" p$ V& ~( u4 @. g* k
            31, F3 B% y! H. ^
            32) e) J; v5 c/ b! r3 i3 y% V3 Q
            33
, C: Z0 H) A" V3 @6 m6 Y            345 l: U% O- x$ f$ s+ {, y
            35
6 z5 ~2 X; V. N' g& d% L3 m            36
* d6 O" e( r% X  P& I1 r% }            37
% I! ~  _4 a$ Y, z) r/ |            38
0 a6 t) z' \2 S! }  Q7 }4 v" N            39
* _6 o' V; i6 a+ o7 Y            407 j+ D3 W! g  W5 @8 v6 w
            41
# r( K2 p' l- i' ]* t" Z            42% n" P3 k1 s9 Q2 J% x
            437 p5 J+ g; X1 A0 U' ^0 j6 ]
            44( `$ {) z+ C( w0 d8 y1 Y! [
            45
' b& J7 m8 W. m/ ]            46
- d4 R; D' e( ]) z; S) h2 M0 z            47
( s3 Q6 K7 Q& f9 m; }            48  l& ?, ?5 D  B$ W: T
            49
6 s% Z. Z- ]  |- \3 C$ G            50
! f! Z# m; X, Y- ?) u6 v- R4 _( e  t            517 q$ M  H1 j# S4 w
            524 t; U$ g/ n: k  \+ ^6 u
            53# j  o  I; m) y+ i6 [4 k" O' ^
            54
9 P' g4 J- G2 H# Z- O) a2 f            55+ e- ?$ P. j& L( S$ N; m
            56
+ w0 r" l6 u: ^  G6 i" u: W            
                        <?php
0 |& F9 R4 i( i2 p, k# K            class inload+ M* H" |! d, P, o
            {" `, x8 I$ p- i& v% x
            /**
8 D$ i% X) K2 E            * 类自动载入,不需要由开发者调用( B; I0 a' y0 i- v
            *
0 r' i3 S) m1 \  m  D( n            * @param string $class 类文件/ V& @5 l3 ]2 h) ]3 w
            */7 L5 ?! Z7 Z0 N/ i# C4 D- t, A* X3 G
            private function autoload( $class )* e( B, f/ G2 }& V; ?! U  }# _! W/ X
            {1 S3 K7 w9 K& O5 y' D1 O
            if(  empty($class) ). s! K# e  r% p- u* C" D
            {
% l$ Z) f7 g% h5 `) \  p            throw new qexception('加载文件不存在'.$class);
- Z, e5 m( a+ Y2 h" q0 N4 l            }) t3 B: q: V* G& ?! X" b& h  S$ B9 k
            else
' a4 z( C& `4 A* t" z            {
* [9 e6 @4 A/ B! ~7 A. U' [1 G2 O            require _spring_.'/_core/springmap.php';  //框架地图, j4 ?' \" S. T) p7 @6 d
            if(!  file_exists(  $source[$class]['file'] ) )8 m1 d9 m6 ^5 ^* y4 y" y  I
            {6 @% ]7 ]- k- d! a7 O" M
            throw new qexception('加载文件不存在'.$class);/ O% c* d' f4 b) w7 x. Q/ ~: z& l
            }" l" G1 H1 w$ k: ~- v
            require $source[$class]['file'];8 l) |) v6 Q9 J0 M. j8 i# N
            }
+ L% p: ]& P. L0 M3 g1 a* A$ X2 e            }; h- d2 Y) C# {5 t
             5 V% T) Y! _" I8 f' B2 d
            /**; f( M+ I& ~" p) y0 l
            * 注册或取消注册一个自动类载入方法0 l+ q9 c+ u. J+ e1 e
            *
; F# T. g4 g8 {% {4 v. c6 q5 _            * 该方法参考 zend framework
8 \+ h: ~; ?( n' R- q            *
% n* A# T; K3 W            * @param string $class 提供自动载入服务的类
- ?4 Q4 Z) Z. m9 [! Y! ~            * @param boolean $enabled 启用或禁用该服务/ s1 ?, k1 m: ?% G* g$ Y2 L
            */
- u5 x, f8 P  J; J# z6 @            private function registerautoload($class = 'interpreter'  , $enabled = true)
. f! c0 V, n# o5 {$ K            {( J9 a1 J) w1 i7 o1 B" N7 Z- j+ q
            if (!function_exists('spl_autoload_register')), a# v* e) u5 d% Z. k) {  E# @1 I' S
            {
+ @4 V+ o6 ?, N1 ^0 F            throw new qexception('spl_autoload 不存在这个php的安装');
- q% m( Z% d) ^( v/ T            }
# o0 i) ~, ~& V* `            if ($enabled  === true)
7 L, C: H1 O% A& J& \5 C1 \/ l            {
, H" X7 l$ J& C: f            spl_autoload_register(array($class, 'autoload'));
! f1 O% `4 v4 p% f% a" N7 F$ O4 |! x8 T            }
& T/ ?+ s$ e  k' E            else% P" c- ~. x9 K8 V
            {0 o/ _' g  N( ?/ s3 ~
            spl_autoload_unregister(array($class, 'autoload'));
2 C/ U. O' S" b            }" s: T' D1 q7 w3 [( q
            }# o2 t* _; X3 l( N$ `
            
4 z6 P8 ]+ A. ~$ w            /**
: @) H- b, ]4 X1 f( {9 D            * 析构函数
8 R  g" C% H; j) A$ n            */
1 m$ L) Z9 E5 v( i* I: X. w            public function __destruct(): M4 l1 P% F/ h" Y% Y! x
            {, \* q+ A$ B) N% ]0 c
            self::registerautoload('interpreter' , false);
5 X, f! L  x& b; h! ~            }
4 @+ R0 t% S- K4 ~# ~            
6 _- U: E! n2 G, @+ N1 N            
  以上所述就是本文的全部内容了,希望大家能够喜欢。
% O3 c( ?7 V0 R$ ^7 `更多网络编程信息请查看: 网络编程
作者: 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.5