spl_autoload_register无输出,如何通过它获取PHP类名?
问题原因
你的代码里spl_autoload_register的回调没触发,是因为自动加载机制仅在PHP尝试使用未定义的类时才会启动。你在实例化CreateRating之前,已经在当前文件里定义了这个类,所以PHP不需要去自动加载它,回调函数自然不会执行,也就没有任何输出。
正确的自动加载用法示例
如果要让自动加载生效,需要把类定义放到单独的文件中,比如:
- 创建
CreateRating.php文件,内容如下:
<?php class CreateRating { public function test() { return 'Test'; } }
- 在主文件中使用自动加载:
<?php spl_autoload_register(function ($className) { echo "自动加载类:{$className}\n"; // 根据类名引入对应的文件 require_once "{$className}.php"; }); // 此时CreateRating类未在当前文件定义,PHP会触发自动加载 $test = new CreateRating(); echo $test->test();
运行这段代码,你会看到回调函数输出类名,同时成功实例化类并调用方法。
如果要获取已定义类的名称
如果你的需求只是获取已实例化对象的类名,不需要用自动加载,直接用get_class()函数即可:
<?php class CreateRating { public function test() { return 'Test'; } } $test = new CreateRating(); echo get_class($test); // 输出:CreateRating
内容的提问来源于stack exchange,提问作者Marcelo Raineri
相关产品推荐
相关产品推荐

