php自动加载
时间:2022-07-22
本文章向大家介绍php自动加载,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
平时总使用composer,反而对自动加载的知识有些陌生啦,重新梳理下php中自动加载的知识
首先php中定义一个类当使用的时候需要将包含改类的文件引用进来才可以使用,例如
这种情况下如果类文件少的话还可以,但是如果类文件多的话,一个个去 require 岂不是要烦死
php中给出了两种解决方法:
__autoload($className)【不推荐】
在php的低版本中支持使用 __autoload 函数来自动获取 new 关键后面的类名,然后根据类名再去加载相应的类文件,代码如下
运行结果
需要加载Student类的类文件
实例化Student类
需要加载Teacher类的类文件
实例化Teacher类
spl_autoload_register()
官方文档: https://www.php.net/manual/zh/function.spl-autoload-register.php
其实它与 __autoload 使用上的区别就是,这个函数可以注册多个自动加载函数。我们上面的例子可以改成这种
目录如下
sql_autoload_register() 除了支持自定义函数外还可以使用 类名:静态方法 的方式
随着项目的越来越复杂,我们会把不同的类放到不同的目录中,这时候就需要定义相应的加载函数加载到 spl_autoload_register() 中 项目结构及代码如下
<?php
define("DIR",dirname(__FILE__));
function autoload($className){
echo "需要加载".$className."类的类文件".PHP_EOL;
$file_path = str_replace('\', DIRECTORY_SEPARATOR, DIR .'\Controller\'. $className).'.php';
if(file_exists($file_path)){
include $file_path;
}
}
function autoload1($className){
echo "需要加载".$className."类的类文件".PHP_EOL;
$file_path = str_replace('\', DIRECTORY_SEPARATOR, DIR .'\Model\'. $className).'.php';
if(file_exists($file_path)){
include $file_path;
}
}
spl_autoload_register("autoload");
spl_autoload_register("autoload1");
new Student();
new Teacher();
这时候会发现很不方便,这个时候我们就需要引入命名空间
spl_autoload_register+命名空间
为每个类引入命名空间,然后在实例化一个对象的时候 注册函数中的 $className 会带上函数的命名空间路径,这样就避免了写多个注册函数的问题,示例如下:
目录结构没有变
Student.php
<?php
namespace Controller;
class Student{
public function __construct()
{
echo "实例化Student类".PHP_EOL;
}
}
Teacher.php
<?php
namespace Model;
class Teacher{
public function __construct()
{
echo "实例化Teacher类".PHP_EOL;
}
}
index.php
<?php
use ControllerStudent;
use ModelTeacher;
define("DIR",dirname(__FILE__));
function autoload($className){
echo "需要加载".$className."类的类文件".PHP_EOL;
// DIRECTORY_SEPARATOR php中内置目录分隔符
$file_path = str_replace('\', DIRECTORY_SEPARATOR, DIR .'\'. $className).'.php';
include $file_path;
}
spl_autoload_register("autoload");
new Student();
new Teacher();
运行结果
需要加载ControllerStudent类的类文件
/home/www/pdemo/demo/Controller/Student.php
实例化Student类
需要加载ModelTeacher类的类文件
/home/www/pdemo/demo/Model/Teacher.php
实例化Teacher类
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC