返回列表 发新帖

php 类自动载入的方法

567.2k 10
swmozowtfl 发表于 2015-7-28 11:32:39|湖北 | 查看全部 阅读模式
  在php5之前,各个php框架如果要实现类的自动加载,一般都是按照某种约定自己实现一个遍历目录,自动加载所有符合约定规则的文件的类或函数。  当然,php5之前对面向对象的支持并不是太好,类的使用也没有现在频繁。 我们来详细探讨下吧。- L  f7 V4 i; o! {2 y, U# e
  php 类自动载入方法
5 n( ?3 q7 z* v- d+ R' d" v$ m, h" S  ?  S: s, ~: m8 z& P: y; I2 c# n! t
            1
& N) g, C, F+ G            2% \7 h1 d  F1 l  X, A; z4 a! m0 m0 L
            3
1 N; t5 [- O3 r6 ~, [; M! P- r            4; b- P8 _* F$ ]# D/ W/ B3 W
            5
5 `! N; W6 i) ~( {8 O3 O- l            6/ @+ M3 L" Y# S3 q8 b( t( [/ M9 R
            7
1 k/ H8 y  D# Z            8
0 `! M' q* C3 l8 _            9
3 t2 [2 E: W* y4 N0 w& h  ?% q- H            10
- q% N. z7 D2 C* O3 s" ?            11
. {0 H, m' H6 q; {' J  y# n            12) Z6 \+ x) @. }( t- a4 `+ X
            13
8 i, [- @' h; l5 J! u            142 Y: b' V1 m% k
            15" h3 {; ]& p+ V  j+ Q+ F" O/ A+ E
            16
6 }& |3 @3 n! o" P' M/ M            17  u5 `; Z& N; x8 ~* y2 p: P
            18
. _* f6 r( y6 q! _            19/ d  V" l+ t1 ]6 Z4 X& ~3 M# w
            20
: |; ]% z# Y; Y* m            21& Z- l+ g; M- x
            22
8 H' D% o9 z! R6 h            235 T; {: i8 v) Y
            242 u& o* j* N) b9 ], N+ P9 i7 x
            25
) I. v6 T' d3 C, I) Q            26$ w) I5 h' E8 U( W7 v# }
            27
9 |) C' B4 [2 p, z            28
! Y1 q. v% f1 p$ T7 D            291 C; ?- u2 W" P6 H# K' D
            30, [# P$ B$ Y' h
            31
) R, i! P+ u; a- S            32+ z# B$ y. I: }7 [; K/ z- I
            33
: K4 Q5 Z* h; o4 l$ q. K            34: E# c+ _; w7 _2 U/ I4 C& M( u
            35
+ _% s  G7 R/ E4 i            36
, f; k9 P- h" A' [& [) E: E$ ^$ T$ f            37
7 Z2 T  \% N+ `1 K" y            38$ `' a# R9 ~9 l! }* N' W  x2 r
            39$ v3 K& q" y1 d) b1 f; z( [4 l9 e& `
            40
; f* ?! a+ ~4 @& E( b, Y            41; u+ W  |6 n# ^% |
            42, g( p+ n% k) a; k, @# u/ j$ w* v( c# [4 _
            43
7 V8 a7 K; M0 G1 t            447 m4 N5 l) B% b6 U
            45
) _7 V# U( j1 K- Y: u            46
# T; E/ y/ ~2 g* c% @2 }: F            47
& {2 V+ r0 h/ W            48
& w/ q  n3 v" A$ s            49
1 Q# K7 o' M2 I5 Z& V2 S0 o            50  F" ^  E, E' ]- G6 ]7 g
            51
% q8 i2 |9 ?$ t. m8 y            52
8 [9 g/ g3 A$ w% \4 G, i- \            53
% X5 R. z$ b9 Z" `5 p5 l# o            54
5 ^( j7 M- W9 _$ v$ e3 q0 w% ?+ F            55
/ P( X  q, p! u9 |6 n            56
7 B7 [7 K& E3 v. w            
                        <?php: ~6 T' T* L" u! H/ O5 [4 e0 g
            class inload* f* ]: {+ I6 Z4 c' o  [, i
            {
3 ]6 O! Y0 f/ }            /**
8 E" D/ u) J1 h& R! @. n            * 类自动载入,不需要由开发者调用
4 q- @$ }& p  n4 T$ [0 g! C            *' [6 d; S3 J, l4 U) j/ q% w# i! |
            * @param string $class 类文件: @7 {8 T2 q4 U" N6 G. f: O
            */8 ^! ^0 _9 T# _
            private function autoload( $class )6 g( z9 x0 C/ s, ]
            {
3 B6 y6 e7 ~# B2 i4 r2 b+ p            if(  empty($class) )
- u4 W" k  O# P& b$ o7 u            {
# L9 S7 R, s. E6 r            throw new qexception('加载文件不存在'.$class);( g" x8 C; V( z& U) V
            }2 F3 F' X( X# _6 c  j6 n4 q; w
            else
6 W/ N! V) a+ t6 p            {% O& H" B" N& b3 G$ i
            require _spring_.'/_core/springmap.php';  //框架地图4 U8 D+ W7 J. w* ^- H9 n- A' o) d
            if(!  file_exists(  $source[$class]['file'] ) )4 s1 i" O1 k( J6 I* D8 m
            {
. s8 F; m- p0 U8 y# O. _, E- z            throw new qexception('加载文件不存在'.$class);+ t' Q. `# j: D+ x* g
            }" J  N" W' n( m" }+ W2 w  n5 y
            require $source[$class]['file'];
: S  i  H1 x) y* }& {/ r            }
9 w8 ^3 E5 L+ _. M' ?+ T8 M            }
9 s* m# d' J+ e3 N            
% D, {$ i: p1 J4 o+ h6 D            /**& G. \" C, y' F. a) s2 D3 l4 e
            * 注册或取消注册一个自动类载入方法9 s, ]/ I8 G' P
            *& Q1 M) p7 Q/ a  L* G
            * 该方法参考 zend framework* |  K: G- ]0 C9 j3 m+ ]
            *
2 f  [" `% q2 O! b- p) K            * @param string $class 提供自动载入服务的类
# t9 K4 o* \. k) b; v0 b            * @param boolean $enabled 启用或禁用该服务/ }; D& y7 D9 u; ]2 ]0 O7 ]8 f
            */
, N, _% v. ^( E% y6 D            private function registerautoload($class = 'interpreter'  , $enabled = true)- M, @2 V/ U9 g/ ^0 }: [& N
            {" V6 `2 X1 T$ K# Q4 x/ b* F' M
            if (!function_exists('spl_autoload_register'))' b2 T. [) E' U! S, ]  W
            {
; J! \( K. B% y$ B; H( b4 C            throw new qexception('spl_autoload 不存在这个php的安装');
) T* l$ P) ?2 f7 K1 f: c3 Y            }/ }) H# |' Z$ D6 [$ K
            if ($enabled  === true)
' ~% t( ~+ E/ a8 h" X0 }1 M0 q            {  F. O1 Q6 Y0 v- O# m! d" Y
            spl_autoload_register(array($class, 'autoload'));8 J  `2 S) h7 T& i
            }3 K  L7 Z3 b7 l
            else! Q8 z% t$ @+ e6 c
            {. ?  l3 C, A$ I
            spl_autoload_unregister(array($class, 'autoload'));9 c7 o' f) ?, Y* u, z; H# ?! A8 r
            }- T  [6 ?. O" ?1 Q& P& R
            }. }# L, Q7 r: c2 _1 R
             / U: L+ J2 H* T$ g& P* l
            /**
0 K- \: c0 @0 A  Y            * 析构函数: W+ ]8 T5 e5 p5 v8 T; G" O
            */, k3 l# g  Q. a0 d; _; v+ Y
            public function __destruct()
1 _  T: s5 A5 b# }            {
) k, M! V* V7 ~6 L) I7 m7 ~7 \' V            self::registerautoload('interpreter' , false);
4 D' `% |. l9 x* [            }
9 o! V) f/ }  m* C3 n            - ?; f: W% v7 f$ O9 t  ^* M
            
  以上所述就是本文的全部内容了,希望大家能够喜欢。4 F8 b* |* C; E9 Y' r# l
更多网络编程信息请查看: 网络编程

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