PHP 实现类的自动加载

使用 spl_autoload_register() 函数实现类的自动加载

一个文件中,往往需要使用多个别的类。这种情况下,一般是必须先在文件顶部使用 require/require_once或 include_include_once 进行加载,才能实例函数。

使用 spl_auto_register() 实现自加载的执行过程输出:

Trying to loadClass1 via ClassAutoloader::loader()
Class1::__construct
Trying to loadClass2 via Class
Autoloader::loader() Class2::__construct

spl_autoload_register - Register given function as __autoload() implementation

Description

bool spl_autoload_register([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]])


Register a function with the spl provided __autoload queue. If the queue is not yet activated it will be activated.

If your code has an existing __autoload() function then this function must be explicitly registered on the __autoload queue. This is because spl_autoload_register()

will efectively replace the engine cache for the __autoload() function by either spl_autoload() or spl_autoload_call().

If there must be multiple autoload functions, spl_autoload_register() allows for this. It effectively creates a queue of autoload functions, and runs through each of 
them in the order they are defined. By contrast, __autoload() may only be defined once.

目录结构:

  • modernphp/ClasssAutoloader.php
  • modernphp/Class1.php
  • mordernphp/Class2.php

ClassAutokloader.php

class ClassAutoloader 
{
    
    public function __construct() {
        spl_autoload_register(array($this, 'loader'));
    }
    
    public function loader($className) {
        
        echo "Trying to load" , $className, ' via ', __METHOD__, "()\n";
        echo "<br/>";
        include $className . '.php';
    }
    
}

$autoloader = new ClassAutoloader();

$obj = new Class1();
$obj = new Class2();

Class1.php

<?php

class Class1
{
    
    public function __construct()
    {
        
        echo __METHOD__;
        echo "<br/>";
    }
}

Class2.php

<?php

class Class1
{
    
    public function __construct()
    {
        
        echo __METHOD__;
        echo "<br/>";
    }
}

推荐阅读更多精彩内容

  • 在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和require方法,去把定义这...
    Nosee123阅读 786评论 0 0
  • 目标 本篇,我们来实现类库自动加载,以及路由解析。 类库自动加载 常规加载 常规加载一般使用include或者re...
    VoidKing阅读 1,575评论 1 6
  • 我们探索了 从 1 app/public/index.php 开始 2 加载 bootstrap /autoloa...
    你很闹i阅读 763评论 0 1
  • 课程准备知识 熟悉和了解数据结构的节本概念 熟悉PHP代码的编写 熟悉面向对象的概念 什么是 SPL SPL的基...
    followyounger1阅读 328评论 0 2
  • 这些内容是从慕课网上看到的,讲了3中类的自动加载方法,试了一下,没毛病。具体见下面代码 <?php//方法1/* ...
    luckybear_5110阅读 122评论 0 0
  • 炎炎的七月,本以为可以好好在同里休养,但因缘弄人。接连几场活动虽感疲劳,但能让听闻者对生命与健康有所获也是甚慰。这...
    艾草人阅读 2,540评论 9 19
  • 海子是一位诗人, 很多人都读过他的诗, 他在春天离去, 留下面朝大海的诗句。 于是有了纪念。 留下了名字, 只是风...
    江南一帅阅读 139评论 0 3
  • 20 17,10.29 星期天 晴 今天的天气特别好,我的心情也很好。因为今天是的是个特殊的日子。女儿中...
    芳香四季阅读 87评论 0 1