PHP, почему я могу создать новый объект после `spl_autoload_unregister`? - PullRequest
0 голосов
/ 26 апреля 2019

Мои коды

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

Я получаю фатальную ошибку: Uncaught Error: класс «Person» не найденin ...

Каков порядок выполнения spl_autoload_register?


PS:

PHP 7.1

...