网站首页 > 博客文章 正文
1、类加载器实现
- 函数spl_autoload_register
注册给定的函数作为 __autoload 的实现
- 函数原型
spl_autoload_register($callBack,$throw=true,$prepend=true)
2、案例1
- 目录名称
/data/api/study/3、相关知识点
- 文件名8、类加载器.php 其源码如下
<?php
/**
* Copyright(C) Iamasb
* @project : 3、workerman相关知识点
* @explain : 类加载器
* @filename : 8、类加载器.php
* @author : Iamasb
*/
class Load
{
/**
* 文件格式常量
*/
const PREFIX = ".php";
/**
* 处理类文件加载的核心方法
* @param $className
* @return bool
*/
public static function toDo($className)
{
echo $className,PHP_EOL;
exit;
}
}
spl_autoload_register('Load::toDo');
// 测试代码
$test = new TestClass();
- 执行结果
- 总结
从这个例子中,可以看出,当注册类加载器后,在当前文件中实例化任何类时,都会触发类加载器的方法。并获取类名。也就是说,如果我们知道类所在的目录位置,那么我们就可以"包含"此类的代码信息,到当前的执行环境里面了
3、案例2
- 新增类文件TestClass.php,其源码如下:
<?php
/**
* Copyright(C) Iamasb
* @project : 3、workerman相关知识点
* @explain : 类加载器,被加载的测试类
* @filename : TestClass.php
* @author : Iamasb
*/
class TestClass
{
public function func()
{
echo 'hello world',PHP_EOL;
}
}
- 修改类加载器的回调方法
public static function toDo($className)
{
// echo $className,PHP_EOL;
// exit;
$file = __DIR__.DIRECTORY_SEPARATOR.$className.self::PREFIX;
if (!file_exists($file)) {
die($className." is not exits.");
}
if (!class_exists($className,false)) {
include_once $file;
}
return true;
}
- 再修改测试代码
$test = new TestClass();
$test->func();
- 再次执行
猜你喜欢
- 2024-09-12 世界上最好的编程语言PHP图层裁剪服务搭建详解
- 2024-09-12 php之多级目录下查找文件中是否含有某个字符串功能实现
- 2024-09-12 phpcms v9类别调用方法(php class 调用)
- 2024-09-12 某设备产品漏洞挖掘-从JS文件挖掘RCE
- 2024-09-12 PHP页面缓存简单实现(php页面缓存简单实现方法)
- 2024-09-12 Laravel 创建自己的扩展包 package
- 2024-09-12 php 一步步实现mvc架构——view篇
- 2024-09-12 php写的mysql备份恢复的类(php备份mysql数据库)
- 2024-09-12 轻松搭建基于 Serverless 的 ThinkPHP 应用
- 2024-09-12 Wo槽,有后门-某区块、积分商城代码审计分享
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)