我正在使用自动加载器按名称空间加载类,它在localhost上运行正常,但在服务器上没有运行。
当Autoloader.php
加载类时,PHP会向我显示此错误:
Warning: require(\..\backoffice\controllers\EquipementsManager.php) failed to open stream: No such file or directory
但是我确定路径是正确的并且文件EquipementsManager.php
存在于此路径中!这意味着自动加载器正在使用正确的路径正确加载类,但PHP不断给出No such file or directory
错误!<登记/>
代码Autoloader.php
:
<?php
/**
* Class Autoloader
*/
class Autoloader{
/**
* Enregistre notre autoloader
*/
static function register(){
spl_autoload_register(array(__CLASS__, 'autoload'));
}
/**
* Inclue le fichier correspondant à notre classe
* @param $class string Le nom de la classe à charger
*/
static function autoload($class){
require '\\..\\'.$class . '.php';
}
}
Class EquipementsManager:
namespace backoffice\controllers;
use backoffice\entities\Connexion;
use backoffice\entities\Equipement;
class EquipementsManager{
//---some stuff to do----
}
我也尝试过这个__DIR__.'\\..\\'.$class . '.php'
仍然是同样的问题,适用于localhost但不适用于网络
今天编辑(2016年2月20日):
我编辑了我的autoload()函数:
static function autoload($class){
$file = (strpos($class, 'backoffice') === false) ? $class : str_replace('\\', DIRECTORY_SEPARATOR, $class);
require $file . '.php';
}
现在我的文件已正确加载,但会出现另一个错误:
require(JsonSerializable.php) [function.require]: failed to open stream: No such file or directory
我使用\JsonSerializable interface
将我的objet转换为jason数组,如下所示:
namespace backoffice\entities;
/**
* PropertyType
*/
class PropertyType implements \JsonSerializable
{
}
如你所知,这个界面在SPL中,为什么他不知道呢?!
答案 0 :(得分:-1)
尝试
$require = str_replace('\\', DIRECTORY_SEPARATOR, '..\\'.$class.'.php');
require($require);