2016-08-09 1 views
1

я использую следующий фрагмент код для автоматической загрузки моих PHP классовPHP самозарядный с пространствами имен и встроенными классами

spl_autoload_register(function ($path) { 
    $path = strtolower(str_replace('\\', '/', $path)); 
    require_once "./$path.class.php"; 
}); 

теперь, когда я использую мои классы как этот use Core\ClassA as ClassA; или use ABC\ClassBBC as ClassBBC он прекрасно работает.

, но когда я хочу, чтобы создать новый экземпляр PHP встроенный в классе mysqli я получаю следующее предупреждение:

Warning: require_once(./mysqli.class.php): failed to open stream: No such file or directory in /var/www/html/projectA/autoloader.php on line 9 

как я могу обеспечить соблюдение автоматического загрузчика для загрузки mysqli независимо от моего ауто- погрузчик?

+0

Используя пространство имен, вы создаете экземпляр mysqli как 'new \ mysqli()'? – CD001

+0

да я использую 'new \ mysqli()' –

+0

Включен ли mysqli в вашем php.ini? Запустите 'phpinfo();' и проверьте, присутствует ли и поддерживается ли mysqli. –

ответ

1

Несколько вещей здесь:

  • прежде всего, вы должны проверить, существует ли файл, прежде чем потребуется его, используя file_exists
  • второй, не запускайте требуют от «./». Вы должны использовать только абсолютные пути. Вы можете узнать, почему здесь: PHP - Failed to open stream : No such file or directory
  • В-третьих, вам не нужно использовать require_once. Поскольку вызывается автозагрузчик, вы можете быть уверены, что файл еще не включен. И require_ один раз медленнее, чем требуется.

В любом случае тот факт, что ваш автозагрузчик вызывается для mysqli, означает, что он не был найден раньше, так что это странно. Поскольку вы упоминаете, что работаете с устаревшим кодом, возможно, вам также потребуется перерегистрировать автозагрузчик по умолчанию.

Смежные вопросы