返回列表 发新帖

php 类自动载入的方法

567.2k 10
swmozowtfl 发表于 2015-7-28 11:32:39|湖北 | 查看全部 阅读模式
  在php5之前,各个php框架如果要实现类的自动加载,一般都是按照某种约定自己实现一个遍历目录,自动加载所有符合约定规则的文件的类或函数。  当然,php5之前对面向对象的支持并不是太好,类的使用也没有现在频繁。 我们来详细探讨下吧。
/ r9 `0 ~. d- F& p" m0 L2 Q  php 类自动载入方法
  Y) T* l- i3 u. z) l  ?
% u& r8 X1 n. _
            1
5 ?( d* o: w- t0 c+ F% }            2, o. Z+ E" f2 Z$ W( K) R4 P
            3* E9 U- d! @: [, U4 T; n( F/ i, M
            48 ]" e+ \6 g7 S6 ]
            5+ d# i5 X2 E8 S. l6 l1 B3 T0 L" N$ ]' B
            6& P8 L& q* G6 G
            75 r; k# N* e1 O& z! _
            8# G. _7 N2 V$ h' b) g* M5 L! D
            9+ w! b  I9 T+ y& l* q* E4 F
            10. l) D; s7 @  P) j( n* T
            110 d, o7 ^" |( @0 Q1 y. V
            12
9 [* t6 m& ^* B- G, u            13
) _5 R$ f; y0 A9 H$ A0 W            14
8 F' ^0 V' m; U% a+ w, }, r% B            150 ^1 K! v9 M! p+ b& |: N) ~/ }  g) R
            16' d6 g! z; a: \9 h  S8 _
            17
( Y8 ]  W9 X& I+ }6 D! D" Y" W            18
+ |& S  E) y4 C# F, W* E            193 N' D" o! l4 f5 H2 G1 A. k
            20
6 e# C" Y) X- U. E$ W8 y            21. Y/ X7 L9 U$ C. K
            22
/ ~  R" L" s9 w2 I8 G4 `            23% O4 J, x" G1 I; C8 o- L
            24
# t3 d- {) \/ x$ ^( u$ K' k, u            25: q  k! T; x: t* Y5 k$ u
            26" \2 K# p3 ~9 U6 x* ~
            27
- H: h) o: q& Z0 p4 O( i4 j            28
3 d9 X9 @! X/ N2 ~            29+ E0 W3 `# S- t& B1 X% _! A6 p, G% V
            30
' d5 T4 s2 F7 G+ d2 J+ o! U& V- I0 J            31
1 |' e8 _: M3 r/ R            323 L- Z' ]4 k" n1 g3 u
            33; A: A) m! [7 n1 e0 y. f
            34* b: n' G  ~7 I" k, E
            35# \: T5 f2 r; j" V$ Z
            36
( O+ z* O+ j" B- e& d  W            37
# P1 H1 d( l) o/ A# ^3 X: v            38
) P7 Y) h4 i( A  i9 ]3 A- t            39  }  P. D2 L. v' k, E4 y+ ~8 Y/ K
            40
: {4 A6 G# `; f7 \  b2 ?            41
4 S* u2 b$ {3 v+ M+ S- j3 W            428 _( z9 h' a/ u) M
            43  Y& d' V. d6 X# w
            44, ?5 c! L1 l& X, M
            45% [7 O2 s: b8 D  ~' J+ H
            46* A2 |/ G& e% B2 S
            477 }* P0 a2 ]9 M8 H8 L7 B2 |* [
            48$ `: f, I7 D4 }1 V
            49
. W% n4 T+ ]$ Z; B            502 u, h0 n8 l  ]5 z
            51
6 k6 F- j2 Z) y, K" ^' \            52
6 f& O7 e/ R5 n, B8 \* n. |& ~            53
& E0 N6 F( D8 J5 j            54
1 J, a" k/ r) k! j& v5 P1 o            55! l1 f) `1 \3 b/ X
            563 l* y! r4 s9 [# @6 X/ D
            
                        <?php" R2 |- g+ a* u+ G+ x
            class inload6 F/ }: t, C6 [  L+ a
            {) q2 G( E4 V9 g9 O% F$ u) x5 k) n
            /**
; Z6 s. n' t$ _! l% R% J            * 类自动载入,不需要由开发者调用
, Y6 y' |% C6 \" w: O: E9 z            *9 `1 x* y$ f; ^+ ~1 c3 ~+ P
            * @param string $class 类文件: C+ l- |5 }: C( F5 S' J$ ]0 P' A
            */+ g) s* i1 X, g; p9 ~
            private function autoload( $class )4 y" T+ E& q- _
            {4 Q1 L! o7 K- @  K% w, c
            if(  empty($class) )6 i' G: U7 e" J1 \; q5 i1 S3 w
            {8 p8 M: f" B* Z+ h
            throw new qexception('加载文件不存在'.$class);
# V: `& w3 O2 A; R            }8 g, s2 C( N9 ~& P7 @' w+ [
            else0 _( K  n' {( O; [6 p# n' \
            {6 O: n, S* o+ V: H9 C! D8 [4 r9 p
            require _spring_.'/_core/springmap.php';  //框架地图% k1 t5 |6 A- o; j4 i# R
            if(!  file_exists(  $source[$class]['file'] ) )
& ?" a' O( y: t6 ?; k+ a1 i$ H            {+ L; y) `, C9 L5 d) t
            throw new qexception('加载文件不存在'.$class);% e  r! l9 P2 o& {
            }
" V' b$ Z3 _$ c- \            require $source[$class]['file'];
1 h, h! ]. V/ ^1 L9 K            }
9 p8 }. r% z0 E            }
) M1 ?  E! A- g" a1 m             0 l7 ]2 H) a: L$ m( x) Y
            /**5 _0 v/ B" ^. s
            * 注册或取消注册一个自动类载入方法; \4 g7 r* Q" ~) D# w
            *" K2 |1 h1 b- h+ B% P' |
            * 该方法参考 zend framework
- x$ \2 Y& ~' j5 I4 V            *$ e7 q* J: {% K7 N
            * @param string $class 提供自动载入服务的类
* u6 L$ d0 Q4 |+ f  j4 {            * @param boolean $enabled 启用或禁用该服务9 A# R' v8 |' b
            */1 T8 U0 b0 g0 _+ D9 X" v
            private function registerautoload($class = 'interpreter'  , $enabled = true)
$ w: Z. J& H$ |) I- U( }; q/ j" J            {
: @% c2 H- w1 {            if (!function_exists('spl_autoload_register'))4 |8 t  s2 z6 C
            {
. G- F4 t+ ^! y( z8 |, ~: c$ o            throw new qexception('spl_autoload 不存在这个php的安装');
( o. y/ s9 S- I& N            }4 V% M- e& B" Q; {5 A2 X6 a
            if ($enabled  === true)! v  X# |( b4 S6 a7 f
            {
) G' ?+ a/ a6 q            spl_autoload_register(array($class, 'autoload'));
' k) K4 C7 B' e! j            }
  b- N/ I/ C' m8 D3 F            else% l+ o& m, @" _1 h' v
            {) f; }8 A. D, [% M/ `0 O
            spl_autoload_unregister(array($class, 'autoload'));+ E% y+ f' q( f, i: f
            }6 u( H3 X- j0 u# i
            }9 ?6 s& Q: ~, t: F! |7 |. F
             , w# k6 f2 H. A* ?1 j0 o
            /**+ j( ]. F/ \! K1 o* B
            * 析构函数9 a" D, T4 ~7 k% K
            */
1 n1 s% t# ^, K) v; d9 P( G$ Y            public function __destruct()
  R7 u& I, ^* ^            {' y" T. d5 Z, ?0 ~/ K7 h) W0 d
            self::registerautoload('interpreter' , false);
2 `6 ?5 p8 _! |7 L            }4 |) e- D( l; q7 d" t3 q9 e8 m" B* h* g
            ' j9 J9 V5 I9 L) h) I4 a
            
  以上所述就是本文的全部内容了,希望大家能够喜欢。# o, Y, D, z( L% l% b7 W
更多网络编程信息请查看: 网络编程

回复|共 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客服 返回顶部
快速回复 返回顶部 返回列表