Heim > Artikel > Backend-Entwicklung > Bei der Verwendung von spl_autoload in PHP lautet das übergebene Namespace-Trennzeichen, was unter Linux ein Problem darstellt
use CoreConfig;
use CoreRouter;
class Framework {
public static function init() { require_once (__DIR__ . '/functions.php'); // 自动加载设置 spl_autoload_register('self::loadClass'); define("ROOT", getcwd()); define('APP', ROOT . '/' . Config::get('app.app_name')); // 设置时区 ini_set('date.timezone', Config::get('app.timezone')); $router = new Router(); // 加载路由设置 require_once (APP . '/routes.php'); $router->dispatch(); } public static function loadClass($className) { // linux上路径 $className = str_replace("\\", "/", $className); $filename = ROOT . "/" . $className . ".php"; if(is_file($filename)) require_once($filename); else throw new \Exception("$filename Is Not Found"); } </p> <p>}</p> <p>然后我用str_replace函数替换,总感觉这样不是最好的方案</p> <h2>回复内容:</h2> <p><?php</p> <p>use CoreConfig;<br>use CoreRouter;</p> <p>class Framework {</p> <pre class="brush:php;toolbar:false"><code>public static function init() { require_once (__DIR__ . '/functions.php'); // 自动加载设置 spl_autoload_register('self::loadClass'); define("ROOT", getcwd()); define('APP', ROOT . '/' . Config::get('app.app_name')); // 设置时区 ini_set('date.timezone', Config::get('app.timezone')); $router = new Router(); // 加载路由设置 require_once (APP . '/routes.php'); $router->dispatch(); } public static function loadClass($className) { // linux上路径 $className = str_replace("\\", "/", $className); $filename = ROOT . "/" . $className . ".php"; if(is_file($filename)) require_once($filename); else throw new \Exception("$filename Is Not Found"); } </p> <p>}</p> <p>然后我用str_replace函数替换,总感觉这样不是最好的方案</p> <p class="answer fmt" data-id="1020000006823690"> </p> <p>你的方法是对的,不过通常不是替换成<code>/
,而是使用常量DIRECTORY_SEPARATOR
使用通用分隔符,DIRECTORY_SEPARATOR