PHP为什么在spl_autoload_unregister之后可以新建一个对象?

时间:2019-04-26 02:47:12

标签: php autoload

我的密码

spl_autoload.php

<?php

function autoload_in_dir($class_name, $dir)
{
    echo "autoload in " . $dir . " classname: " . $class_name . "\n";

    $class_path = $dir . $class_name . '.class.php';
    if (file_exists($class_path)) {
        require_once $class_path;
    } else {
        echo 'class file' . $class_path . 'not found!';
    }
}

function autoload_in_current_dir($class_name)
{
    autoload_in_dir($class_name, "./");
} 

spl_autoload_register('autoload_in_current_dir');

$person = new Person("Yi", 28); // 1
var_dump($person); // 2

spl_autoload_unregister("autoload_in_current_dir");

$person = new Person("Yifan", 28);
var_dump($person);

输出:

autoload in ./ classname: Person
object(Person)#1 (2) {
  ["name"]=>
  string(2) "Yi"
  ["age"]=>
  int(28)
}
object(Person)#2 (2) {
  ["name"]=>
  string(5) "Yifan"
  ["age"]=>
  int(28)
}

可以,但是我尚未注册。为什么在spl_autoload_unregister之后可以新建一个对象?


但如果删除以下行:

$person = new Person("Yi", 28); // 1
var_dump($person); // 2

我遇到致命错误:未捕获的错误:在...中找不到类'Person'。

spl_autoload_register的执行顺序是什么?


PS:

PHP 7.1

0 个答案:

没有答案