我有一个在项目之外的目录中命名的类。该目录包含在include_path
指令中。我想使用spl_autoload
类自动加载课程。但是,我只是遇到错误。似乎它只是尝试从项目目录加载文件。
这是一台Windows机器,但我希望它可以在Windows或Linux机器上使用
##incude_path directive##
include_path = ".;C:xamppphpPEAR;C:UsersJoeyDropboxwebglobal_includes;C:UsersJoeyDropboxwebglobal_includesutility;C:UsersJoeyDropboxwebglobal_includesutilityarrayTools"
//index.php
require 'bootstrap.php';
$array = array('Hello','world');
$array[] = array('Hello','world','2');
$array[2][1] = array('Hello','world',3);
echo '<p>The number of dimesions: '.utilityarrayToolsarrayTools::numberOfDimensions($array).'</p>';
//bootstrap.php
spl_autoload_register('autoLoader::autoLoad');
class autoLoader
{
public static function autoLoad($file)
{
if(is_string($file)){
if(file_exists("$file.php")){
try{
include "$file.php";
}catch(Exception $exc){
echo '<pre><p>'.$exc->getMessage().'</p>'.$exc->getTraceAsString().'</pre>';
}
}
}
}
}
我找到了一种解决方法,但是必须有更好的方法
<?php
//bootstrap.php
spl_autoload_register('autoLoader::autoLoad');
class autoLoader
{
public static function autoLoad($file)
{
if(is_string($file)){
$path_and_file = self::fileExists($file);
if($path_and_file !== FALSE){
include $path_and_file;
}else{
//This is for debugging purposes on dev only
throw new Exception("$file Does Not exsist");
}
}else{
throw new Exception('Classes must be a string');
}
}
protected static function fileExists($file)
{
$include_paths = explode(';',get_include_path());
foreach($include_paths as $path){
if(file_exists("$path\$file.php")){
return "$path\$file.php";
}elseif(file_exists(str_replace('\','/',"$path\$file.php"))){
return str_replace('\','/',"$path\$file.php");
}
}
return FALSE;
}
}