PHP学习笔记1——类的自动加载


PHP7以下版本,使用__autoload实现类的自动加载;
PHP7以上版本,使用spl_autoload_register实现类的自动加载。

类的命名规范

  • 一个类要单独定义成一个独立的类文件;
  • 类文件扩展名,要以.class.php结尾,是一种约定,不是必须的;
  • 类文件主名要与类名一致;
  • 例如:Db.class.php、UserControll.class.php、UserModel.class.php

类的自定义加载函数:spl_autoload_register()

spl_autoload_register()何时调用

当试图使用未定义的类时spl_autoload_register自动调用,使用一个类有以下几种情况:

  1. 使用new关键字创建不存在类的对象时,spl_autoload_register自动调用;例如:$obj=new Student();
  2. 当使用静态化方式访问一个不存在的类时,spl_autoload_register自动调用,例如:Student::show();
  3. 当继承一个不存在的类时,spl_autoload_register自动调用,例如:class Stu extends Parent{}
  4. 当实现一个不存在的接口时,spl_autoload_register自动调用,例如:class Stu implements Inter

语法格式

  1. 描述:将函数注册到SPL(标准PHP库)的__autoload函数队列中。如果队列中函数尚未激活,则激活它们。它实际上创建了autoload的函数队列,按定义的顺序逐个执行。
  2. 语法:bool spl_autoload_register([callback $autoload_function])
  3. 参数:$autoload_function 欲注册的自动装载函数,可以是匿名函数,也可以是字符串的函数名称;
    $autoload_function 有一个传递过来的类名形参,用于在函数中构建类文件路径。
  4. 返回:成功时返回true,或者在失败时返回false。

例子代码:
文件结构:在这里插入图片描述
Teacher.cla.php

<?php
//定义一个教师类
class Teacher{
	private $name="小王";
	private $school="北京大学";
	public function __construct(){
		echo "{$this->name}毕业于{$this->school}。<br>";
	}
}

Student.class.php

<?php
//定义一个学生类
class Student{
	private $name="张三";
	private $age=18;
	public function __construct(){
		echo "{$this->name}的年龄是{$this->age}岁。<br>";
	}
}

(1)用普通函数作为参数app.php

<?php
//类的自动加载:注册类的装载规则
spl_autoload_register("f1");
spl_autoload_register("f2");

function f1($className)
{
	//构建类文件的路径
	$filename="./public/$className.class.php";
	//如果类文件存在,则包含
	if(file_exists($filename))
		require_once($filename);
}
function f2($className)
{
	//构建类文件的路径
	$filename="./libs/$className.cla.php";
	//如果类文件存在,则包含
	if(file_exists($filename))
		require_once($filename);
}

//创建学生类对象
$obj1=new Student();
//创建教师类对象
$obj2=new Teacher();

(2)使用匿名函数作为参数

<?php
//类的自动加载:注册类的装载规则
spl_autoload_register(function ($className)
	{
		//构建所有不同规则了文件路径
		$arr=array(
				"./public/$className.class.php",
				"./libs/$className.cla.php",
			);
		//循环数组
		foreach ($arr as $filename) {
			//如果类文件存在,则包含
			if(file_exists($filename))
				require_once($filename);
		}
	}
);

//创建学生类对象
$obj1=new Student();
//创建教师类对象
$obj2=new Teacher();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值