Я использую автозагрузчик для загрузки классов по их пространствам имен, он отлично работает на 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
ошибку 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'; } }
Класс EquipementsManager:
namespace backoffice\controllers; use backoffice\entities\Connexion; use backoffice\entities\Equipement; class EquipementsManager{ //---some stuff to do---- }
Я также пробовал этот __DIR__.'\\..\\'.$class . '.php'
__DIR__.'\\..\\'.$class . '.php'
прежнему остается той же проблемой, работает на localhost, но не в Интернете.
Сегодня редактирование (20/02/2016):
Я отредактировал функцию 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, так почему он этого не знает?!