gpt4 book ai didi

深入理解PHP类的自动载入机制

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章深入理解PHP类的自动载入机制由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

php的自动加载:

在php5以前,我们要用某个类或类的方法,那必须include或者require,之后才能使用,每次用一个类,都需要写一条include,麻烦 。

php作者想简单点,最好能引用一个类时,如果当前没有include进来,系统能自动去找到该类,自动引进~ 。

于是:__autoload()函数应运而生.

通常放在应用程序入口类里面,比如discuz中,放在class_core.php中.

先讲浅显的例子:

第一种情况:文件A.php中内容如下 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
class A{
 
   public function __construct(){
 
      echo 'fff' ;
 
  }
 
}
 
?>

文件C.php 中内容如下:

?
1
2
3
4
5
6
7
8
9
10
11
<?php 
function __autoload( $class
$file = $class . '.php'
if ( is_file ( $file )) { 
require_once ( $file ); 
$a = new A(); //这边会自动调用__autoload,引入A.php文件
 
?>

第二种情况:有时我希望能自定义autoload,并且希望起一个更酷的名字loader,则C.php改为如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function loader( $class )
{
$file = $class . '.php' ;
if ( is_file ( $file )) {
require_once ( $file );
}
}
 
spl_autoload_register( 'loader' ); //注册一个自动加载方法,覆盖原有的__autoload
 
$a = new A();
 
?>

第三种情况:我希望高大上一点,用一个类来管理自动加载 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php 
class Loader 
public static function loadClass( $class
$file = $class . '.php'
if ( is_file ( $file )) { 
require_once ( $file ); 
 
spl_autoload_register( array ( 'Loader' , 'loadClass' )); 
 
$a = new A();
 
?>

当前为最佳形式.

通常我们将spl_autoload_register(*)放在入口脚本,即一开始就引用进来。比如下面discuz的做法.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
if (function_exist( 'spl_autoload_register' )){
 
  spl_autoload_register( array ( 'core' , 'autoload' )); //如果是php5以上,存在注册函数,则注册自己写的core类中的autoload为自动加载函数
 
} else {
 
   function __autoload( $class ){     //如果不是,则重写php原生函数__autoload函数,让其调用自己的core中函数。
 
     return core::autoload( $class );
 
  }
 
}

这段扔在入口文件最前面,自然是极好的~ 。

以上这篇深入理解PHP类的自动载入机制就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

最后此篇关于深入理解PHP类的自动载入机制的文章就讲到这里了,如果你想了解更多关于深入理解PHP类的自动载入机制的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com