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

mac2025-11-20  4

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

类的命名规范类的自定义加载函数:spl_autoload_register()spl_autoload_register()何时调用语法格式(1)用普通函数作为参数app.php(2)使用匿名函数作为参数 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自动调用,使用一个类有以下几种情况:

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

语法格式

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