得知互动

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

作者: swmozowtfl    时间: 2015-7-28 11:32
标题: php 类自动载入的方法
  在php5之前,各个php框架如果要实现类的自动加载,一般都是按照某种约定自己实现一个遍历目录,自动加载所有符合约定规则的文件的类或函数。  当然,php5之前对面向对象的支持并不是太好,类的使用也没有现在频繁。 我们来详细探讨下吧。% H# V! k) P: [. S2 y
  php 类自动载入方法4 }5 O' U1 p5 L7 g! \5 w' s
  ?
$ O9 e" l7 p3 H; D  @, }
            1
1 ^4 m1 U( V  B" j) _            2
; X4 n: b; }( k" t) `, L            3, S, k, o  ^: I# [; G) C# O
            4
; c0 Z" c; g1 y* Q; S- n8 l            5* V0 W) n* H+ Z: d: h3 j
            6
! ?" f$ `( s4 M8 @  o$ O            7
. a* ]6 Y/ j0 P$ `+ u) O            8
" A" k- e5 D9 a            9+ A6 v0 N) |: u1 Y% y, w0 M# d
            10* W. l' q$ t0 `; V
            110 f& D6 u3 J, a' G2 P2 L  C" r
            127 e' k; s8 g" W1 M0 o0 D
            13. O/ D9 I7 |% ]6 N7 A% g/ P+ V
            14
# O6 F" n- l5 K! i  r! ~3 x6 S            153 e5 Z% c7 Y* ~
            16
/ B1 @1 w7 r% O/ }! k' o& r            17
2 A5 U2 ^. U) o8 x            180 q6 d: `! a. F+ e% j
            199 r% ?4 [2 a- ~' L
            20  O* V9 l& q8 x9 Q
            21
' z. ?& J1 d4 q# C# W6 |2 c' M            225 [: I9 h& t* }' x# Z# c" U& H
            23
, e1 N- P6 ^" \+ c+ P9 q            24
! t% n( r/ n' c  o            25
4 K3 t2 a( y7 b            26( e5 E; B7 w9 P% K8 m6 q
            27" R, E( u) [% B9 v$ `
            281 D$ g9 l' w: E7 {
            29
6 x/ p! E. r' B7 r  ]            30! P) S: k" R7 r. v0 C9 f) E' [
            31
; [& s% b) P% o: ]/ @4 r8 B            32% a; v  {5 K3 Z# e# P
            33
" f' v: V4 G2 T/ G' g) G            34
" r9 o8 ]' O6 w$ a7 j' i            35
7 @) \+ {) q0 u- z5 G/ }1 r) l/ N2 p            364 o" Y' ?* n, E' K( q
            371 g) T. d) I5 s5 B% f2 ]+ p
            38
, K: M0 m) L9 @4 e# v8 b0 b( g            39; h" `$ |7 S: [2 J( z+ l4 U
            40
' r2 A) [4 Q" z8 N- [# a; l& \. ~            41
/ E$ D* S* y) L' p! ]  f            425 |) l! g; [$ x# J
            438 F- P. K  p2 F& I
            44
3 x3 R) j! G( j            453 H5 ^; h% P7 |. {  Q
            46* r( `/ x6 T5 |4 W2 N- v, _5 i
            47
8 s8 r' a) X' @7 o8 t' n% f6 P- q            48% a" \7 e. P) B* z1 j
            49
: G4 W& I6 ^& j            50( P% J  Z3 O# a, Z
            51
* x+ G$ m# A- ]8 ~  F/ m8 R0 Y            52
3 O/ T# J. s, S) U; E            53
9 d3 q9 N( c( @9 y            54
: ~. f1 F9 n- @7 Z4 S8 B! r, c+ }0 q            55
; e) q. |( \( U5 X/ K            56& Q0 x# ~% E# M! o, v6 ]
            
                        <?php
3 j2 G8 `* o1 ~; {5 z0 F( i            class inload) L9 w3 j0 J$ B6 F: }/ }
            {
, v: W. V. [3 o; p+ d9 `1 q' q            /**# z# R4 Q5 @0 `5 [$ P, Q* r4 P
            * 类自动载入,不需要由开发者调用
1 m# i6 [. C6 b, ~            *1 i( [$ N2 j8 g" G' R# V" S1 z
            * @param string $class 类文件- Y/ e: z% ?8 t4 x- m
            */
0 ~  s+ k- m2 a            private function autoload( $class )
9 ^) X0 \, [) G6 z# ~  r8 i            {( ?$ Y  |, Q" }' X2 t% Y
            if(  empty($class) )
. U6 Q. `- d  @: e            {
' W) f& U' `/ S0 y% B            throw new qexception('加载文件不存在'.$class);
/ x) r$ A! S. q/ \! h+ h/ D            }* V# ]# ]; @& _+ ~
            else
; H4 f4 k0 n& S5 d* N            {! [" F5 V0 L; d
            require _spring_.'/_core/springmap.php';  //框架地图
0 R0 d+ d# x7 U+ Q3 ]$ _            if(!  file_exists(  $source[$class]['file'] ) )1 V* k/ U7 q9 \& h$ u& Q
            {
% c# `% Y' ?6 a7 A  Z            throw new qexception('加载文件不存在'.$class);9 _7 `8 O3 _( {) l+ V- a- R
            }
* I* d3 M  Z8 K% n' J! |            require $source[$class]['file'];
/ A2 R( ^, K2 B; o: q$ g            }
* q9 u/ g. ?) @            }5 S8 p  v! p) r# c) U6 M- u8 k
            
3 B/ W: d1 V6 ~            /**+ D# S& X- g8 B: r9 L& |
            * 注册或取消注册一个自动类载入方法+ r3 Z% i7 h  T
            *
: k; Q1 Y4 j) S+ `5 B            * 该方法参考 zend framework) `. G* R5 c: }, l- [
            *; z9 T" ^2 `( X. J; H7 J7 x
            * @param string $class 提供自动载入服务的类
9 q( h# l3 P7 ^& r! S            * @param boolean $enabled 启用或禁用该服务' U% r& o# c9 y6 J
            */1 A2 B/ C: Z* [/ x5 F
            private function registerautoload($class = 'interpreter'  , $enabled = true)
$ F0 ]9 c: j. k8 P            {
" a: A# k! I7 o            if (!function_exists('spl_autoload_register'))
8 }4 I1 K1 ~/ {9 \6 @            {( G, v  s4 x2 }' d) T5 [: u
            throw new qexception('spl_autoload 不存在这个php的安装');/ q7 N: f; D6 }
            }! D* G0 j8 N8 C' u- d" i
            if ($enabled  === true)
8 p* _0 z% d4 L, {3 \+ k            {! I  Z% S/ s/ G0 C
            spl_autoload_register(array($class, 'autoload'));' h' s4 R  v3 p- C& f1 `
            }7 V+ p' B. O# a/ Y* E# R+ G4 D+ H
            else
& j8 p0 f4 U+ s/ S+ b            {9 `, A  {2 {1 F4 ^9 o
            spl_autoload_unregister(array($class, 'autoload'));
/ F) [6 S$ j2 [, p  c            }$ S- Y5 `/ k4 g( s5 j' `! e
            }( ]6 T( s  Q+ x
            
, D+ U" \+ Q; Z& Z            /**
  r. q: h! U/ }+ K* I            * 析构函数
/ ~/ r  I" s9 V# d; A  o6 }- v            */& R6 a$ p7 R+ [& v: Q
            public function __destruct()
( o. y# h. v0 l) r6 S1 e% {2 U! Z            {+ F6 h; l% Y. b
            self::registerautoload('interpreter' , false);5 ]- x! [, U' F2 J9 K
            }
* ^' L8 ]& T1 q6 j5 `' A; Q. L# [            " p) i; V' ?/ `
            
  以上所述就是本文的全部内容了,希望大家能够喜欢。" j% b  E0 Y2 j5 V/ c4 N
更多网络编程信息请查看: 网络编程
作者: 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.4