Почему операторы use не могут импортировать класс PHPMailer с пространством имен в глобальную область видимости в php-shell? - PullRequest
0 голосов
/ 06 октября 2018

Сохраните следующее как send.php, его можно выполнить с php -f send.php или 127.0.0.1/send.php, без вывода информации об ошибке.

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require_once('/home/debian9/vendor/autoload.php'); 
$mail = new PHPMailer();
?>

Операторы use импортируют класс PHPMailer с пространством имен в глобальныйscope, поэтому не нужно использовать FQCN (полное имя класса), например $mail = new PHPMailer\PHPMailer\PHPMailer();, достаточно просто $mail = new PHPMailer();.

Откройте php-оболочку с помощью php -a.

php > use PHPMailer\PHPMailer\PHPMailer;
php > use PHPMailer\PHPMailer\Exception;
php > require '/home/debian9/vendor/autoload.php';
php > $mail = new PHPMailer(true);
PHP Warning: Uncaught Error: Class 'PHPMailer' not found in php shell code:1
Stack trace:
#0 {main}
thrown in php shell code on line 1

Почему $mail = new PHPMailer(true); не может импортировать класс PHPMailer с пространством имен в глобальную область видимости в оболочке php?
Вы должны написать $mail = new PHPMailer\PHPMailer\PHPMailer(); в оболочке php.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...