关灯

[研究发现] php 类自动载入的方法

[复制链接]
swmozowtfl 发表于 2015-7-28 11:32:39 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
  在php5之前,各个php框架如果要实现类的自动加载,一般都是按照某种约定自己实现一个遍历目录,自动加载所有符合约定规则的文件的类或函数。  当然,php5之前对面向对象的支持并不是太好,类的使用也没有现在频繁。 我们来详细探讨下吧。
, Z6 {0 w: P( n  php 类自动载入方法
+ N! }& i8 B- M  ?
( r* _& y& e, x/ G0 g. C0 ^
            1
+ i  V) \; w. O$ U7 u            2
( B- z% [" t4 J. ?! e6 J            3
/ v& K6 O4 T) B- U) j            4  M5 L, ~+ Y# u; X/ l$ t2 R3 W. |
            5/ ~2 b& @2 @; v$ {8 v7 L
            64 E3 t4 [7 {4 {* R, V4 j
            7
  w% p1 \) |% z4 {            8
2 t, E% ~" s9 d+ A% F0 X            9
4 {# \3 Y5 B1 `0 v$ R' O5 p            10
* M0 I# Q* H5 ~0 m  Y            11  ?! ^' S3 q+ B  U
            12
% R# e' q8 r8 j8 R) t$ Z            13
5 M: r8 N" |: B: w' w- T0 ~            143 Q  Q* y' q! C: b% g, N( X8 D
            156 |' e- g- ~4 p# c- n1 T
            16
' Y( G% J$ W( ?" l7 S            17
# B2 B7 Z" \2 [            18  z+ r4 x0 @' o9 z6 V
            19
: F' c/ v) [( a  ]! F            20
7 ?5 }( E4 S. \. Z) G0 o            21
- @  J6 N( z6 b9 R0 Y            22- w' V: I$ [" `% F( k6 }
            23
$ g# i2 X9 y2 J2 u$ t- ?: ]1 Q7 h            24
: s8 \# X1 t$ F0 f& ?/ G2 ]            25% q4 W6 ?# U! X! A5 O) Y
            26$ l8 O" z4 F# Y; ?  L3 c6 l& W
            27
* A4 ?1 h1 j. q/ u0 |            28$ \4 m6 u' `- ?) u/ I) U% H
            29  z4 K2 b% E. N) \) i& J  F+ z
            30# D! v9 L' i8 c; i1 y, m& o9 I9 k
            31/ U$ j& R: |. h6 V% o: n5 s( l! h
            32
2 G0 @. ~0 y0 g. ^& _            337 K% o! J- G% N6 j# Y% v5 ?
            34
' }" A8 {' E: Z7 v) C6 x: N1 c            35# M/ @& x" H9 N, x
            36
! L% {8 [) w: |            37) ^7 j# n5 `( U( T0 x5 V
            38
0 H6 p6 h* n3 C4 D3 p! j1 I            39
8 H6 |) n, z7 F  {4 ^9 x            40: a4 \: ?3 U$ z. i; K
            41
- O/ L( |3 A1 I            42
+ |( K; N6 p! i' F, O            43' K8 {- S0 G- Z& a
            44
" d1 u7 P9 ]+ C2 K2 [0 M. b8 ?- t6 _            45
# B+ J% G- C# {- r( l3 I            46
3 N/ h3 A& h% P- O& ?' c. D            47
9 G" r0 _9 }$ W! k. ^* T            488 ]: _9 B5 T% T5 \* k
            49% B! x) ^6 u, \7 u7 h% m  {
            50
1 m9 ^, |& w! F            51: T+ q* ?( m: |  w  _# D
            52
  ^% ?- V* X5 k            531 G/ F, O: w3 L0 m+ j
            54. K$ o/ L% }, O4 q# p2 }; @
            55
6 F  C3 l& H/ U( W  S* T            56  R, V/ ?( e. x$ n8 v# q
            
                        <?php
/ _9 J3 N; h* a- b4 ^. N2 C            class inload
- `; x- l% a3 l% R            {( T, ]6 s+ k) S7 J% l  n
            /**
7 Z9 j& R5 B! i$ |1 F1 z% v            * 类自动载入,不需要由开发者调用
# {% L# S& i* Z- i' n& H8 D& Y: ^' B! R            *5 [% [' N& |' U  G+ G, ~* \
            * @param string $class 类文件/ y3 X; V- ]& `) Z+ J; {2 K
            */
+ _3 A' [( Y5 U            private function autoload( $class )
; b: P* C" k5 y  L( h* T& l7 L/ G            {4 {4 ~: j' R8 @- u4 I5 c* \
            if(  empty($class) )& _; ?8 o0 z/ E
            {  ?) e" t! y' m! ~3 Y; J6 n
            throw new qexception('加载文件不存在'.$class);
. G' A1 f: r- S7 \1 f) B4 h, U            }
" {7 w* _4 r* v. |! K- u            else
$ b. t: `# q/ o* A% E            {
1 a; i9 J/ P% w- M            require _spring_.'/_core/springmap.php';  //框架地图
7 |& }$ ^" l( Q* N( F# X. o( _            if(!  file_exists(  $source[$class]['file'] ) )
2 _3 h; |1 W) [2 Y/ i$ S. Z            {0 b% J6 O& e7 j  x: o
            throw new qexception('加载文件不存在'.$class);
. a$ n* i5 l  P7 r            }
' f* r$ h& S; c/ l3 q6 L/ Y$ m            require $source[$class]['file'];  `$ O1 g" {. h; n9 l
            }6 @' \$ X* _+ z" L  ?9 C4 E( y
            }7 n1 K# g* {, D$ e
            
* O, v- d; a2 p$ {            /**
+ j; q: B4 g8 ^$ I            * 注册或取消注册一个自动类载入方法
# @) N$ Q) V$ V' p            *
8 r, x1 l3 i% x1 P! w            * 该方法参考 zend framework
4 ]! Q2 L1 F9 r5 A; Z0 H            *7 ?, V& A6 B0 z4 j+ ~$ U
            * @param string $class 提供自动载入服务的类: {' z2 W4 n: T2 z4 n* ^0 ^
            * @param boolean $enabled 启用或禁用该服务
. J6 [9 ]. G' Q2 F* n4 v4 ?            */
3 `% p+ v1 h4 }6 \% R0 V" ]5 C# P            private function registerautoload($class = 'interpreter'  , $enabled = true)) {- \4 p; q) t& W( s& M
            {
- r$ }0 X/ ?) ~1 O" O8 ?4 e! Z            if (!function_exists('spl_autoload_register'))
3 U- s( Z! G9 I* @7 ^3 `* E            {# c( z; J/ o1 @% X+ L
            throw new qexception('spl_autoload 不存在这个php的安装');
/ M! [* f6 e+ }% \            }
% V3 I% R) ~: {  h5 s4 q1 R2 D            if ($enabled  === true)
) u0 p: k: [* q! W% {" w' Q8 ]5 n            {3 O" ^+ z0 @3 \2 w1 p
            spl_autoload_register(array($class, 'autoload'));
1 r4 b8 L; o3 ]6 U9 Q            }$ m- d" F; v# t; l, H% A3 ]! D
            else' F* p9 F% A" _- Q4 U9 }" _
            {7 O. U! R6 T. {9 ]2 _9 f7 m
            spl_autoload_unregister(array($class, 'autoload'));
* {% M0 T! I9 _7 \8 N0 i5 G  P            }
( U; H0 I0 F$ Q0 u* ?! B; @( K            }" [" P1 o: L9 q9 T/ V- V
            
7 Y4 u3 N9 S8 W# ~            /**2 I! ?: ]; l! R. R: _4 g
            * 析构函数
9 L) O: ~0 Y. x( @% D  |) {: o0 P* E            */
; v7 U# m* B& ^            public function __destruct()" w& E' ^( t& A  K4 w, @# Q( S
            {/ ]8 w1 A4 a8 ?' f
            self::registerautoload('interpreter' , false);
/ {+ r0 W" R5 @            }
: ~4 O3 J/ E* V  o6 k+ _            
" b1 H" l2 ^" M' W, A            
  以上所述就是本文的全部内容了,希望大家能够喜欢。
. p- J2 p5 B: I2 r: H0 y2 q更多网络编程信息请查看: 网络编程
 

精彩评论10

正序浏览
GoodyFouppy 发表于 2016-1-30 15:00:55 | 显示全部楼层
 
本人在此留言均为网络上复制,用于检验本人电脑键盘录入、屏幕显示的机械、光电性能。并不代表本人局部或全部同意、支持或者反对楼主观点。
 
bqtklouu 发表于 2016-1-30 15:00:29 | 显示全部楼层
 
做为老人!在吧里我都懒的都不想说话!送完经验我就走!
 
wwdu926a 发表于 2016-1-30 15:00:51 | 显示全部楼层
 
我在顶贴~!~
 
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 | 显示全部楼层
 
还呕像.....
 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


0关注

1粉丝

2503帖子

热门图文
热门帖子
排行榜
作者专栏

关注我们:微信订阅号

官方微信

APP下载

全国服务Q Q:

956130084

中国·湖北

Email:956130084@qq.com

Copyright   ©2015-2022  站长技术交流论坛|互联网技术交流平台Powered by©Discuz!技术支持:得知网络  

鄂公网安备 42018502006730号

  ( 鄂ICP备15006301号-5 )