返回列表 发新帖

php 类自动载入的方法

567.0k 10
swmozowtfl 发表于 2015-7-28 11:32:39|湖北 | 查看全部 阅读模式
  在php5之前,各个php框架如果要实现类的自动加载,一般都是按照某种约定自己实现一个遍历目录,自动加载所有符合约定规则的文件的类或函数。  当然,php5之前对面向对象的支持并不是太好,类的使用也没有现在频繁。 我们来详细探讨下吧。0 g* h( f, q, C/ c% X5 d$ f: G
  php 类自动载入方法
+ ?4 [: G+ v6 ^  ?
8 [6 @" }. e) d  ]7 R2 n6 W* J
            1
5 V, q# J3 K. P4 e. l            2' X+ o+ J7 c5 k  Z6 S; p$ h9 m
            3
' ?3 V" y! ?% |! J            4; Q+ t& [3 G- F0 N
            5
/ D3 S, _7 w, _+ y% N            61 O, \+ d# G2 ?& c
            7% Q4 ^. g9 F; e6 t5 v' M/ J* N
            8( k* J, ?6 T0 j
            9+ O4 s- `9 x3 T9 f; Z! z& T$ W
            10
4 r# g7 U+ _1 Z* `            11
( ]+ m  t$ u$ u% i( E) T, I/ j  H            12
2 ~5 g, p' p6 I            13/ z( C* b% e7 A1 A: O0 K
            14
" ~# @1 c6 ?7 A6 k1 w7 T6 k            15
" p" F/ R" ?  ~4 ?/ z+ M            16
: j% K& I: k$ K" T% l( I; g# \2 y. R            17
9 w* c2 o7 _0 ]" m            18
) `8 Y3 g1 q* |" J            19
& }2 T* g! c9 {: R1 Z, Z& [            20
; w; J. _* D, W4 c. ~2 g            213 V/ d# D1 z. e( R7 Y, f
            22
. N( \" w$ d+ x5 D6 q) X7 ?9 p1 {            23$ S$ S  N" l, b: ^+ O  S* m
            24( w6 g9 a  X1 a
            25
. y1 B. [- u) ?- ?7 ]/ u& \            26
  j- y; [" q/ J% m7 L$ ~1 E  O            27
* Y/ y" ?, V3 j% M            28# S& ^/ f4 u$ c2 V. R9 E4 _
            29
# D9 \* w: D, Y1 ]2 x* V            30
$ Z+ F9 V- e% E; a, ]. D" }+ J            313 h8 E, w" W( U; [2 o% h& J
            32
; a7 f/ K" {5 g" }5 D            33( C' m9 h  t. `% x
            34
$ q; T! Y% C# k; `2 W            35" |/ k8 _+ z0 Q1 Y6 [! \
            360 I# Q, E* h( e7 M
            37  H% m) c1 E! J
            38
( l3 ]4 o4 d! i9 |9 V) M3 q% \( V            39
8 A# X* b6 a* G$ o. D            40' }4 n* z. x" T0 h3 g8 x
            41  @2 d( t) n1 d4 R3 {: K
            42
' f+ A2 W& e! N! K& i            436 l1 y: B# U. w) c3 E
            44
; u4 _; L" m; `" {            452 @5 {2 w7 c$ _+ o! {
            46
# z* _3 p- M. S7 |2 G8 c4 p            47
) o: h" L6 B4 K, ?( v; M3 g            48+ x- c% d& l/ L  [
            496 h; P0 {# Z& n/ v8 y  \- e8 E2 v8 Q
            50
5 `* J+ K* Q, N  F  Y; R5 `            511 b& h4 A1 Y& k
            521 s2 D9 _/ V0 L$ ~3 L
            535 Q( u, p$ h- O. G) y
            54% ?+ D8 E& W! S( Z
            555 q7 F- f4 @8 w2 Q9 k
            56
' J& R+ ~( @- }; d: S( z            
                        <?php5 [0 i0 C; u. ]  o
            class inload" V- j! u5 T/ n
            {, [8 W# S7 N# c% z$ ?4 M5 z5 n
            /**3 ~( w. i! N& s
            * 类自动载入,不需要由开发者调用  H" X0 ^: o( w
            *0 I% x+ e1 X3 k5 R  u  I
            * @param string $class 类文件9 ?5 U( {: S' d
            */8 W7 N; S' M  K: _9 M+ ^3 E6 I
            private function autoload( $class )
- X- [5 s9 u$ r4 x0 k            {% b  X  p# R  X: p/ r1 z+ {2 X  X
            if(  empty($class) ); `" d5 x; ]4 P+ f4 V6 @$ P$ C- d
            {
* B* V1 ]* D; N( ~$ t            throw new qexception('加载文件不存在'.$class);
% [" I! u$ e$ W$ v& d            }
" C& z5 {- G* V1 e& R            else1 B3 X0 c' n7 f1 C# @
            {- m+ P- {' O5 q  y( t/ B" w9 f  o
            require _spring_.'/_core/springmap.php';  //框架地图& F" D) k) r' g# O9 i( H* e  t8 ]
            if(!  file_exists(  $source[$class]['file'] ) )( q$ j9 h' I* x+ z6 R
            {
; Z1 l( ~; r! L, P1 }3 M- ]1 h) {            throw new qexception('加载文件不存在'.$class);
& P4 k8 U, w. K% N            }
$ e. G; W/ E( K            require $source[$class]['file'];4 E* Z6 V1 f3 i  D# G
            }
( {. [; J' r) d            }
$ |! [7 f, I+ k  {# |+ G9 L            
3 G$ R1 M' w' I. e* q            /**
7 Y- B% z& C) i  |# c            * 注册或取消注册一个自动类载入方法+ P. V+ u: q# \0 d6 i
            *) y8 j2 C) J2 A# N& J
            * 该方法参考 zend framework2 ]# I& V3 B5 k- H+ x/ o
            *+ i' Y: k7 v% ?; q3 r
            * @param string $class 提供自动载入服务的类
& c1 Z. c7 M+ m! m: Q+ y8 _& v! ~            * @param boolean $enabled 启用或禁用该服务
4 ?( H" A3 |& S5 Z, p            */* E0 h& E1 [; c4 Z4 ^% b$ y/ U
            private function registerautoload($class = 'interpreter'  , $enabled = true)
3 T/ A  w5 T) x1 ~! N5 s            {
2 I: z' g* d* i: _, Q7 j/ F3 ]% B            if (!function_exists('spl_autoload_register'))& p8 d/ c* H4 n4 H
            {5 I5 i& O7 z, k
            throw new qexception('spl_autoload 不存在这个php的安装');" U& m+ N& i" |! S4 d* |+ T5 s
            }
  R8 J6 }8 }5 L& @* x9 {' [            if ($enabled  === true)# e  Z4 n. J* y  n
            {
. a) I% Q; O  t6 D, Z/ x  g& V            spl_autoload_register(array($class, 'autoload'));
& o, Y9 ~( H" Z$ C/ G            }' `! J1 Y: m& }7 i$ M
            else$ U0 b+ ^8 Q1 c: c4 i
            {- w7 k2 d* a4 O, u3 L* h$ j
            spl_autoload_unregister(array($class, 'autoload'));; |; h9 n) c7 V) J9 H
            }
, r  W6 F) J9 ?1 o! G! y1 [5 w            }
# K# T2 \# `. ]0 E! {) M             1 T& l" o( B! Z9 [7 p
            /**  ?! T/ p; r, n& A6 D4 L
            * 析构函数
! A. R+ H% _. r+ y            */
. u1 L0 D9 Y( R8 u            public function __destruct()- l& n$ r7 r/ b2 N9 b
            {, }. W! S' z9 Q
            self::registerautoload('interpreter' , false);
1 [. D7 Y  h+ w            }! l0 w- @5 E% C: ?; N) N% }
            
# O7 M4 z  q% U4 H! h) F8 r8 r3 u            
  以上所述就是本文的全部内容了,希望大家能够喜欢。
, u4 h1 p/ S+ f; _, Z# o更多网络编程信息请查看: 网络编程

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