返回列表 发新帖

php 类自动载入的方法

567.2k 10
swmozowtfl 发表于 2015-7-28 11:32:39|湖北 | 查看全部 阅读模式
  在php5之前,各个php框架如果要实现类的自动加载,一般都是按照某种约定自己实现一个遍历目录,自动加载所有符合约定规则的文件的类或函数。  当然,php5之前对面向对象的支持并不是太好,类的使用也没有现在频繁。 我们来详细探讨下吧。1 }5 D+ P8 [7 Z9 |2 _/ B
  php 类自动载入方法" ~% g' H0 N4 f1 d! A6 E1 Z0 \
  ?
4 ?+ d, `" M  s# b, S+ m  G
            1
" w1 O1 P# |& |/ P# t2 C1 ^            2. J0 _6 M* Q* |2 S9 s
            3
1 c$ y! {# z" N. Y            43 ]7 A% C. Q& {  \
            5
% c1 \/ O& U8 ^" n9 D& r4 k            6, s/ V; @& @/ _( k! V# v
            7
, x% h$ [; Z& m1 r7 k: J$ c# \            8# |! |+ R9 O. ^" F, R
            9$ [: {9 h# X. `% L) y
            10
# v# l7 _* V' e2 `- O7 w8 n            115 T! \. @( W0 Q/ ?8 _7 _
            12+ S- l, J" {5 ~- C
            132 ]9 h/ s* F8 k, T* q. E
            14
& G9 q3 w9 r; Z            15
8 |* `2 R5 s" z- u  p2 L            16: g( V% u9 ~& k
            17  v- R1 @/ h# a* R
            18% r& R1 P  |) I/ O5 c2 i7 @
            19
. ?$ g% s8 g4 N0 H( v            205 P% |7 |$ N1 J4 o: l; K
            21! u/ P/ n/ b" M# x* {! f
            22" a* k/ B* j9 O/ U( c) V. s: T
            23- f* o) t8 Q8 z) q. c0 }4 S
            240 v" \$ I* ?4 ]% A6 Q
            255 X  J+ J1 s- K
            26
: \2 @8 Y" z0 ]. i            277 |: I5 X  h7 u
            285 N( B) V$ r/ m
            29* L( |* F6 v: g
            30$ ~( M: O% {; w' f
            31
# Z4 |( f1 d& M            326 i8 F& t. b, B
            33# ?3 ^" v; w- `" y
            34
1 a  |5 Q4 c6 _0 ]            35' ^9 _: p  u8 E( k
            362 X6 w( y1 l* x- i# p! a  p' \+ [
            37* H# v) N& [& d8 p8 j% y
            38$ A* J9 I3 ]0 c% D" `; z. \
            39$ F) w: A+ v/ N. |
            40, x, C7 E. L: F8 Y& |- U
            41
& [( [# E, ]( p. E' ]% b) {            42% ?4 U, n% c/ D- @
            43
% a, U& V% h2 H2 e            44
; ?* P) _+ K/ n, Z  p5 k: n- O+ \            45
+ o' `  `6 d% y  h            46, z# n3 t4 l4 p! r, P; w
            47$ j  |/ G; t8 C7 P# \
            48& c. y2 l7 R* @- ?
            49; J# P. ?# q5 n" f
            500 G: A; ]( T: b* [6 I3 Q$ G
            51
" |, S' p1 L$ v: D            52
# i' A) z- {5 v5 b$ }) G  ?            53. S4 B4 s* h' G- E1 d
            542 n) y9 e6 h+ |+ c: q2 E) L) A
            55( u$ K- F5 D" X, `* i* m, L
            56$ _! L. M" N& y& o
            
                        <?php  p$ T2 D8 c+ i- S$ r; C8 l( {
            class inload
: G# @3 B4 x* O+ [8 P+ l) Q3 l            {
& F# Z: S/ d' h* \' z            /**2 v" ^$ r; J+ ^- t2 I' H) @+ c
            * 类自动载入,不需要由开发者调用: @4 Z  ~7 S; k6 b: t
            */ B& g; V- ^3 T8 w/ b9 s
            * @param string $class 类文件7 _0 Q( d4 C- x/ H( O
            */
! M6 s% \: K+ o! z- {& f            private function autoload( $class )
! D/ a2 }- `  E4 _. _            {
/ c/ t; u4 i5 s6 s$ D* h; N            if(  empty($class) )6 T$ m' r5 `" ^& p  b) \
            {
/ t2 }7 |0 y* H; T- a/ @            throw new qexception('加载文件不存在'.$class);( n$ k& R7 v4 c* k- e- A9 U
            }( ]2 n) B. k; X# o% S9 q, g+ A
            else
! u, [4 O" \, ]$ i            {: Z/ @& ]  ~$ B" y9 f
            require _spring_.'/_core/springmap.php';  //框架地图
8 R. j! l; a" p: k            if(!  file_exists(  $source[$class]['file'] ) )
# f: d+ X  \& D' K  s: m            {0 _- I9 p  Y! T  ~# v! R6 _7 {$ X+ @& c
            throw new qexception('加载文件不存在'.$class);! g7 D; ?! E- [0 t) Y7 m
            }
- M) q# n0 [& f! w5 i4 r! p! z            require $source[$class]['file'];/ _4 v# z8 I" L! `4 H6 T# u+ j8 ?$ L
            }6 r1 d; Y6 x- J& [9 H1 Z+ O
            }* i2 R% i# X. J% K3 O# x
            
, o8 ]% E3 C4 y. t/ K            /**! J9 h. F4 r2 ~. Z& g7 x& D
            * 注册或取消注册一个自动类载入方法
* \1 R0 J$ [7 t1 F3 [: b' K            *) i: T" W- ^* }
            * 该方法参考 zend framework
3 w1 S% R: R; G* H1 y6 n4 I            *
) S/ ~3 @* g  F8 V1 U            * @param string $class 提供自动载入服务的类
  s) R' r, {* H' m" t            * @param boolean $enabled 启用或禁用该服务8 E) l& w- V- s! x7 k) m
            */) a0 R+ V8 A8 D6 }0 f  O9 m
            private function registerautoload($class = 'interpreter'  , $enabled = true)/ t7 [& a  |* c% V& }& ]9 N
            {
$ v4 H2 O& k: m! l# @& j            if (!function_exists('spl_autoload_register'))
0 d9 A2 U, |8 `- G            {
" W  x% b0 g7 q            throw new qexception('spl_autoload 不存在这个php的安装');, o6 y: b9 @. e5 k) J- y
            }# \6 S  |2 {2 x& ^# X
            if ($enabled  === true); Z7 f) K# x) Y) X2 H# [0 {' a7 }
            {4 v1 R4 V# ^. q: i" ]" Q
            spl_autoload_register(array($class, 'autoload'));
- G+ {+ z+ h7 ^% T$ K            }* Y$ M7 l: E: b) g" h
            else
# `  r0 F2 S( x4 Q* c* _            {! N  W' [( r5 Z" `
            spl_autoload_unregister(array($class, 'autoload'));! G* u7 I! h6 P/ d) y, \
            }- n) [( r- _3 C7 n" w9 h6 G% N
            }
/ r& h! U7 p. ?. q: X            
! y7 w% U; n5 B6 O0 w! r4 ?% ?            /**" e8 }& r/ U3 ?4 a0 N1 S0 w! `8 E
            * 析构函数6 n! s3 d# X+ ^+ t4 z3 \* y, k
            */
" d) h: \& |/ _4 V            public function __destruct()
7 C! O! V) p. J( {( O1 h, q7 T            {
- W- q: h5 H9 h/ P            self::registerautoload('interpreter' , false);
& T+ Z4 b5 _$ |9 j& Z            }- Q$ Y) g- ?' j
            " T6 Q1 J9 ]8 J7 C
            
  以上所述就是本文的全部内容了,希望大家能够喜欢。
* N, k2 p# I6 b  f& ?- H7 Z% s更多网络编程信息请查看: 网络编程

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