Как автоматически загрузить и вызвать независимый класс PHP без использования require_once? - PullRequest
1 голос
/ 30 апреля 2019

У меня есть основной класс с именем EQ, связанный с другими классами, и его можно посмотреть по этой ссылке GitHub .

Класс EQ не подключен к моему композитору , и я вызываю его на локальном сервере, используя:

php -f path/to/EQ.php 

и работающий сервер, использующий задание CRON:

1,15,30,45  *   *   *   *   (sleep 12; /usr/bin/php -q /path/to/EQ.php >/dev/null 2>&1)

Я не уверен, как правильно использовать автозагрузчик, загрузить все зависимые файлы в этот класс и удалить require_once s. Я пытался, и это, кажется, работает:

spl_autoload_register(array('EQ', 'autoload'));

Как мне решить эту проблему?

1020 * Покушение * //Creates a JSON for all equities // iextrading API require_once __DIR__ . "/EquityRecords.php"; // Gets data from sectors // iextrading API require_once __DIR__ . "/SectorMovers.php"; // Basic Statistical Methods require_once __DIR__ . "/ST.php"; // HTML view PHP require_once __DIR__ . "/BuildHTMLstringForEQ.php"; // Chart calculations require_once __DIR__ . "/ChartEQ.php"; // Helper methods require_once __DIR__ . "/HelperEQ.php"; if (EQ::isLocalServer()) { error_reporting(E_ALL); } else { error_reporting(0); } /** * This is the main method of this class. * Collects/Processes/Writes on ~8K-10K MD files (meta tags and HTML) for equities extracted from API 1 at iextrading * Updates all equities files in the front symbol directory at $dir */ EQ::getEquilibriums(new EQ()); /** * This is a key class for processing all equities including two other classes * Stock */ class EQ { } spl_autoload_register(array('EQ', 'autoload'));

1 Ответ

1 голос
/ 30 апреля 2019

По сути, ваша функция автозагрузчика сопоставляет имя класса с именем файла.Например:

class EQ
{
    public function autoloader($classname)
    {
        $filename = __DIR__ . "/includes/$classname.class.php";
        if (file_exists($filename)) {
            require_once $filename;
        } else {
            throw new Exception(sprintf("File %s not found!", $filename));
        }
    }
}

spl_autoload_register(["EQ", "autoloader"]);

$st = new ST;
// ST.php should be loaded automatically
$st->doStuff();

Но большинство этих вещей встроено в PHP, что делает ваш код еще проще:

spl_autoload_extensions(".php");
spl_autoload_register();
$st = new ST;
$st->doStuff();

Пока ST.php находится где-то в вашем include_path это просто работает.Функция автозагрузчика не требуется.

...