Как мне устранить отсутствующую функцию класса в codeigniter?

#php

Вопрос:

У меня есть это в моем контроллере:

 if (!defined('BASEPATH'))
    exit('No direct script access allowed');
use xampphtdocsclientvendorphpofficephpspreadsheetsrcPhpSpreadsheetSpreadsheet;
use xampphtdocsclientvendorphpofficephpspreadsheetsrcPhpSpreadsheetWriterXlsx;
 

Но вот ошибка, которую я вижу после запуска кода

  Message: Class 'xampphtdocsclientvendorphpofficephpspreadsheetsrcPhpSpreadsheetSpreadsheet' not found
    
  Filename: C:xampphtdocsclientapplicationcontrollersadminHome.php
 

Ответ №1:

Вы, кажется, запутались use и include / require .

use Инструкция предназначена для импорта и сглаживания пространства имен. В нем говорится: «Когда я использую имя класса Foo , на самом деле я имею в виду SomethingSomethingFoo следующее . Это полное имя может выглядеть как путь к файлу Windows, но здесь на самом деле разделитель пространства имен PHP и напрямую не связан с расположением на диске.

В этом случае вы бы написали:

 // Alias these class name so I don't have to write them in full in this file
use PhpSpreadsheetSpreadsheet;
use PhpSpreadsheetWriterXlsx;
 

Если вы хотите ссылаться на код в определенном файле, вам нужно включить и потребовать семейство ключевых слов. Они говорят: «загрузите этот PHP-файл и выполните в нем код, включая определения классов и функций.

Таким образом, имело бы смысл следующее:

 // Load the file
require_once 'xampphtdocsclientvendorphpofficephpspreadsheetsrcPhpSpreadsheetSpreadsheet.php';
require_once 'xampphtdocsclientvendorphpofficephpspreadsheetsrcPhpSpreadsheetWriterXlsx.php';
 

Однако большинство библиотек PHP созданы для автоматической загрузки, поэтому вам не нужно называть каждый файл вручную. Как правило, вам даже не нужно настраивать саму загрузку, вместо этого вы используете Composer для их установки, и он настроит загрузчик для вас.

Затем вы напишете в основной точке входа своего кода:

 require_once 'vendor/autoload.php';
 

И классы будут загружаться автоматически при обращении. Обратите внимание, что вам, вероятно, все еще нужны use строки, и они должны быть в каждом файле (потому что каждый файл может использовать один и тот же псевдоним для ссылки на разные классы).

Комментарии:

1. Большое спасибо. Объяснение было кратким и полезным. Я не потратил до 5 минут, прежде чем решил эту проблему, используя ваше объяснение. Спасибо.