Невозможно получить доступ к классу внутри функции PHP

Я пытаюсь запустить MailerSend, платформу для исходящей электронной почты. Я загрузил необходимый код на свой сервер, и MailerSend работает нормально, если я помещу следующий код в один файл PHP и выполню этот файл — назовем его «SendAnEmail.php»:

    require '/home/xxxxx/vendor/autoload.php';
    use MailerSend\MailerSend;
    use MailerSend\Helpers\Builder\Recipient;
    use MailerSend\Helpers\Builder\EmailParams;
    use MailerSend\Helpers\Builder\Attachment;
    
    $mailersend = new MailerSend(['api_key' => $apiKey]);
        $recipients[] = new Recipient($email, '');
    $emailParams = (new EmailParams())
        ->setFrom('fromemail.com')
        ->setFromName('My System')
        ->setRecipients($recipients)
        ->setSubject($subject)
        ->setHtml('This is the HTML content')
        ->setText('This is the text content')
        ->setReplyTo('[email protected]')
        ->setReplyToName('My System')
        ->setAttachments($attachments);

    // send the email
        $response = $mailersend->email->send($emailParams);


Проблема в том, что я хочу, чтобы этот код выполнялся внутри функции, поэтому я могу вызвать функцию из нескольких php-скриптов внутри системы, отправить функции основную информацию (адрес, строку темы, основной текст и т. д.) и получить функция отправки электронного письма. Я не могу заставить это работать: когда я помещаю первые пять строк приведенного выше кода в вызывающий PHP-скрипт, я получаю сообщение об ошибке «Класс «Получатель» не найден». Если я помещу первые пять строк кода выше в функцию, я получу синтаксическую ошибку «неожиданное использование», указывающую на первый оператор «использования».

Я не эксперт в PHP. Я знаю, как предоставить функции обычные переменные из вызывающего сценария с помощью глобального оператора внутри функции, но я не знаю, как предоставить класс Receipient или другие нужные мне классы внутри функции.

Надеюсь, этот вопрос ответит на этот вопрос - я не совсем уверен, что использую правильную терминологию. Любая помощь приветствуется.

С уважением.

Пожалуйста, опубликуйте свою версию функции, которую вы пытаетесь написать, даже если она не работает.

Chris Haas 20.05.2024 23:53

Приносим извинения, ответ ниже решил проблему. К вашему сведению, вызываемая функция использовала класс MailerSend для отправки электронного письма — это был код, который работал в автономном файле, и — как только класс стал «доступным» для кода внутри функции — функция работала нормально, как хорошо.

Jonathan Spector 21.05.2024 01:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Было бы что-то вроде этого:

sendAnEmail.php

require '/home/xxxxx/vendor/autoload.php';
    use MailerSend\MailerSend;
    use MailerSend\Helpers\Builder\Recipient;
    use MailerSend\Helpers\Builder\EmailParams;
    use MailerSend\Helpers\Builder\Attachment;
    
function sendEmail($email, $subject, $body) {

    $mailersend = new MailerSend(['api_key' => $apiKey]);
        $recipients[] = new Recipient($email, '');
    $emailParams = (new EmailParams())
        ->setFrom('fromemail.com')
        ->setFromName('My System')
        ->setRecipients($recipients)
        ->setSubject($subject)
        ->setHtml('This is the HTML content')
        ->setText('This is the text content')
        ->setReplyTo('[email protected]')
        ->setReplyToName('My System')
        ->setAttachments($attachments);

    // send the email
        $response = $mailersend->email->send($emailParams);

  
}

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

Файл 2

require 'path/to/sendAnEmail.php';
$email = '[email protected]';
$subject = 'You won a FREE CAR!!!!';
$body = 'CONGRATS!';

sendEmail($email, $subject, $body)

Другие вопросы по теме