美文网首页
PHP类的自动加载

PHP类的自动加载

作者: 老衲灬 | 来源:发表于2018-07-08 19:24 被阅读4次
1、为什么需要类的自动加载

很多开发者写面向对象的应用程序时,对每个类的定义,都建立一个独立的 PHP 源文件,方便类文件的统一管理,这无可厚非。但一个很大的烦恼是,不得不在每个脚本开头,写一个长长的包含文件列表(每个类一个文件)。这样一来,就增加了很多负担、占用了很多的内存,对于后期维护也不方便。
解决方案:按需要加载类文件,而不是把所有类全部包含进来。

2、类文件的命名规范

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

3、类的自定义加载函数:spl_autoload_register()
1)spl_autoload_register()何时调用?

当试图使用未定义的类时spl_autoload_register自动调用,使用一个类有以下几种情况:
a、使用new关键字创建不存在类的对象时,spl_autoload_register自动调用;例如:$obj = new Student()
b、当使用静态化方式访问一个不存在的类时,spl_autoload_register自动调用,例如:Student::show();
c、当继承一个不存在的类时,spl_autoload_register自动调用,例如:class Stu extends Parent{}
d、当实现一个不存在的接口时,spl_autoload_register自动调用,例如:class Stu implements Inter

2)语法格式

a、描述:将函数注册到SPL(标准PHP库)的__autoload函数队列中。如果该队列中的函数尚未激活,则激活它们。它实际上创建了 autoload 函数的队列,按定义时的顺序逐个执行。
b、语法:bool spl_autoload_register ([ callback $autoload_function ] )

c、参数:$autoload_function,欲注册的自动装载函数,可以是匿名函数,也可以是字符串的函数名称。$autoload_function有一个传递过来的类名形参,用于在函数中构建类文件路径。
d、返回:成功时返回 TRUE, 或者在失败时返回 FALSE。

3)使用普通函数作为参数
//类的自动装载
spl_autoload_register("func1");
spl_autoload_register("func2");
function func1($className)
{
    //构建类文件的真实路径
    $filename = "./class/student/$className.class.php";
    if(file_exists($filename))
    {
        require_once($filename);
    }
}
function func2($className)
{
    //构建类文件的真实路径
    $filename = "./class/teacher/$className.class.php";
    if(file_exists($filename))
    {
        require_once($filename);
    }
}
//创建学生类
$stu = new Student();
$stu->showInfo();
//创建教师类
$tch = new Teacher();
$tch->showInfo();
4)使用匿名函数作为参数
//类的自动装载
spl_autoload_register(function($className)
{
    //构建不同类文件的路径数组
    $arr = array(
        "./class/student/$className.class.php",
        "./class/teacher/$className.class.php"
    );
    //循环数组
    foreach($arr as $filename)
    {
        if(file_exists($filename))
        {
            require_once($filename);
        }
    }
});
//创建学生类
$stu = new Student();
$stu->showInfo();
//创建教师类
$tch = new Teacher();
$tch->showInfo();

相关文章

  • PHP 使用总结

    自动类加载 (auto-load) 自动类加载说白了就是自动 include / require php 文件,这...

  • 自己编写PHP框架需要考虑的部分

    1. MVC2. 自动加载: PHP: 自动加载类;3. 错误处理:http://php.net/manual/z...

  • PHP 懒加载哪些事儿

    PHP自动加载 此篇文章主要介绍加载的php类的方式,以及自动加载的几种模式;题外话:大家空了可以多看看别人写的框...

  • PHP Composer详解

    PHP composer php composer的作用 composer是如何实现类的自动加载 composer...

  • PHP类自动加载

    很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件。一个很大的烦恼是不得不在每个脚本开头写一个...

  • php类的自动加载

    本例尝试分别从MyClass1.php和MyClass2.php文件中加载MyClass1和MyClass2类。 ...

  • PHP类的自动加载

    1、为什么需要类的自动加载 很多开发者写面向对象的应用程序时,对每个类的定义,都建立一个独立的 PHP 源文件,方...

  • php的类自动加载

    本文分为两部分:第一部分讲__autoload()函数实现的类自动加载。第二部分讲spl_autoload_reg...

  • php 类的自动加载

    spl_autoload_register() 函数可以注册任意数量的自动加载器,当使用尚未被定义的类(class...

  • PHP面向对象之类的自动加载

    类的自动加载 含义: 当某行代码需要一个类的时候,php的内部机制可以做到“自动加载该类文件”,以满足该行需要一个...

网友评论

      本文标题:PHP类的自动加载

      本文链接:https://www.haomeiwen.com/subject/bsaouftx.html