php – 加载类时出现spl_autoload_register问题
发布时间:2020-12-13 21:49:40 所属栏目:PHP教程 来源:网络整理
导读:所以我之前已经在这里问过这个问题,但所提供的解决方案并不适用于我. 这是我的设置: /mylib /Vendor/Module/MyClass.php/document_root index.php 这是我的index.php ?phpdefine('CLASSDIR','mylib');define('BASEPATH',@realpath( dirname (__FILE__).'/..
所以我之前已经在这里问过这个问题,但所提供的解决方案并不适用于我.
这是我的设置: /mylib /Vendor/Module/MyClass.php /document_root index.php 这是我的index.php <?php define('CLASSDIR','mylib'); define('BASEPATH',@realpath( dirname (__FILE__).'/../').'/'.CLASSDIR); spl_autoload_register(null,false); spl_autoload_extensions('.php'); function autoLoader($className){ $className = ltrim($className,''); $fileName = ''; $namespace = ''; if ($lastNsPos = strrpos($className,'')) { echo 'does it come here? nope.'; $namespace = substr($className,$lastNsPos); $className = substr($className,$lastNsPos + 1); $fileName = str_replace('',DIRECTORY_SEPARATOR,$namespace) . DIRECTORY_SEPARATOR; } $fileName .= BASEPATH.'/'.str_replace('_',$className) . '.php'; require $fileName; } spl_autoload_register('autoLoader'); //$obj = new MyClass(); $obj = new VendorModuleMyClass(); $obj::test(); ?> 这是我的MyClass.php <?php namespace VendorModule; class MyClass{ public function __construct(){ echo 'weird'; } public function test(){ echo 'strange'; } } ?> 我的回声都没有显示任何东西.显然我的班级也没有加载.相反,我得到这个错误. Fatal error: Call to undefined method MyClass::test() in /<documentroot>/index.php on line 29 请帮忙.我已经坚持了很长一段时间,而我的其余部分都在受苦.我尝试移动到spl_autoload_register()只是因为它是推荐的方式.现在失去的时间让我感到后悔. 解决方法
你正在调用test()函数错误(使用静态方式?).
用以下方法调用函数: $obj = new MyClass(); $obj->test(); 如果您打算使用像MyClass :: test()这样的静态方法,请在您的类中声明您的函数: public static function test() { } 此外,您的自动加载器过于复杂.它可以简化为: $class_dir = array( '/mylib/Vendor/Module/',// Add more paths here ( or you can build your own $class_dir ) ); function class_loader($class_name) { global $class_dir; foreach ($class_dir as $directory) { if (file_exists($directory . $class_name . '.php')) { require_once($directory . $class_name . '.php'); return; } } } spl_autoload_register('class_loader'); 第3编辑: 我注意到你设置的路径不正确. $fileName .= BASEPATH.'/'.str_replace('_',$className) . '.php'; 它应该是: $filename = BASEPATH .'/' . $filename . str_replace('_',$className) . '.php'; 如前所述,可以通过回显$filename的值来轻松调试它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |