自动加载 spl_aotuload_register

spl_autoload_register

spl_autoload_register — 注册给定的函数作为 __autoload 的实现

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

参数
autoload_function
欲注册的自动装载函数。如果没有提供任何参数,则自动注册 autoload 的默认实现函数spl_autoload()。

throw
此参数设置了 autoload_function 无法成功注册时, spl_autoload_register()是否抛出异常。

prepend
如果是 true,spl_autoload_register() 会添加函数到队列之首,而不是队列尾部。

Node: 自动加载揭秘


<?php 
    function a ($c) { 
      echo "a\n"; 
      class Ala {
          function __construct(){
              echo "Ala __construct";
          }
      }
    } 
    function b ($c) {
        class Bla {
          function __construct(){
              echo "Bla __construct";
          }
      }
      echo "b\n"; 
    }
    spl_autoload_register(function ($class_name){
        echo " My Closure $class_name \n";
    }; // 注册 但是没有执行
    spl_autoload_register('a');  // 注册 但是没有执行
    spl_autoload_register('b');  // 注册 但是没有执行

    $c = new Bla();
?>
output:    
    My Closure Bla  // 第一个注册的,发现new 的类不在这里继续下面执行
    a               // 执行第二个注册的 发现不是 继续下面
    b               // 执行第三个注册的 发现在这里 所以开始 new
    Bla __construct // new 成功 __construct 执行

new 类的时候 会跑到 spl_autoload_register() 注册方法中寻找

01、注册是有先后顺序的
02、在没有找到之前的方法都会被执行
03、找到之后 后面注册的就不会执行了

Example #1 带有 namespace 自动注册

test.php 
<?php 
    namespace test;
    class test{
            function __construct(){
                    echo "Test created\n";
            }
    }
?> 

然后我们可以使用下面的代码来加载类:
<?
    spl_autoload_register(function(){
        require "./test.php";
    });

    $t = new \test\test();
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值