php_autoload自动加载类与机制分析
2023-06-13 09:14:32 时间
在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可
test.class.php
复制代码代码如下:
test.class.php
<?php
classabc{
function__construct()
{
echo"www.hzhuti.com;
}
}
?>
load.php
代码如下
<?php
classLOAD
{
staticfunctionloadClass($class_name)
{
$filename=$class_name.".class.php";
if(is_file($filename))returninclude_once$filename;
}
}
/**
*设置对象的自动载入
*spl_autoload_register—Registergivenfunctionas__autoload()implementation
*/
spl_autoload_register(array("LOAD","loadClass"));
$a=newTest();//实现自动加载,很多框架就用这种方法自动加载类
?>
__autoload()
在实际项目中,不可能把所有的类都写在一个PHP文件中,当在一个PHP文件中需要调用另一个文件中声明的类时,就需要通过include把这个文件引入。不过有的时候,在文件众多的项目中,要一一将所需类的文件都include进来,一个很大的烦恼是不得不在每个类文件开头写一个长长的包含文件的列表。我们能不能在用到什么类的时候,再把这个类所在的php文件导入呢?
为此,PHP提供了__autoload()方法,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在PHP出错失败前有了最后一个机会加载所需的类。
__autoload()方法接收的一个参数,就是欲加载的类的类名,所以这时候需要类名与文件名对应,如Person.php,对应的类名就是Pserson。
下面看个完整的实例
classClassA{
publicfunction__construct(){
echo“ClassAloadsuccess!”;
}
}
//定义一个类ClassA,文件名为ClassA.php
classClassA{
publicfunction__construct(){
echo“ClassAloadsuccess!”;
}
}
classClassBextendsClassA{
publicfunction__construct(){
//parent::__construct();
echo“ClassBloadsuccess!”;
}
}
//定义一个类ClassB,文件名为ClassB.php,ClassB继承ClassA
classClassBextendsClassA{
publicfunction__construct(){
//parent::__construct();
echo“ClassBloadsuccess!”;
}
}
定义两个测试用的类之后,我们来编写一个含有__autoload()方法的PHP运行程序文件如下:
function__autoload($classname){
$classpath=”./”.$classname.".php";
if(file_exists($classpath)){
require_once($classpath);
}
else{
echo‘classfile".$classpath."notfound!";
}
}
$newobj=newClassA();
$newobj=newClassB();
相关文章
- php实现自动开启/关闭夜间模式
- 大型仓库进销存管理系统php源代码,多仓版进销存管理系统PHP源码ERP仓库管理系统php网络版进销存源码…
- php://input allow_url_include,DVWA设置PHP函数allow_url_include:已禁用
- 【说站】php架构师是做什么的
- PHP实现常见排序
- PHP error_log():错误日志的配置和使用方法
- PHP实现Linux脚本之旅(php调用linux脚本)
- Sublime3使用codeFomatter出现PHP Deprecated: The each() function is deprecated详解编程语言
- PHP封装、继承和多态
- PHP专业连接MySQL:实现快速代码.(php连接mysql数据库代码)
- 在Linux上快速搭建PHP开发环境(linux搭建php环境)
- 数据库远程连接MySQL数据库:利用PHP实现简易方法(php远程mysql)
- 函数Linux下禁用PHP函数的步骤(linux关闭php)
- PHP快速获取MySQL数据库信息(php获取mysql信息)
- PHP操作MySQL数据库的完整指南(php读写mysql)
- PHP开发者必须了解的Linux常识(php开发linux)
- 使用PHP操作MySQL数据库的基础——mysql类库(mysql类库php)
- PHP连接MSSQL:实现不同数据库的高效通信(php连接mssql端口)
- 简便快捷:在PHP服务器上使用MSSQL(php服务器 mssql)
- 基于PHP和MSSQL的连接设置(php mssql设置)
- PHP MSSQL框架:为企业开发更好的应用程序(php mssql 框架)
- PHP驱动MSSQL数据库操作实例研究(php mssql操作类)
- 内存Redis自动优化PHP内存管理(redis自动释放php)
- PHP面向对象编程快速入门
- php的一个登录的类[推荐]
- php生成随机密码的几种方法
- PHP和Mysqlweb应用开发核心技术第1部分Php基础-1开始了解php
- 一漂亮的PHP图片验证码实例