为什么"使用"语句不能包含在包含文件中?

Her*_*der 3 php

为什么我的use陈述不能放在include文件中?

这很好用:

require_once("PHPMailer_Loader.php");

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

SendEmailWindows("foo@bar.com", "smtp test", "test body");

function SendEmailWindows($emailTo, $subject, $body){
    $mail = new PHPMailer;
    [... all the rest of the function code]
}
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试将这两个use语句移动到我的PHPMailer_Loader.php脚本(放在文件的最底部)时,它会突然出现这个错误:

Fatal error: Class 'PHPMailer' not found in [...]\EmailTester.php on line 12
Run Code Online (Sandbox Code Playgroud)

只是为了整洁和紧凑,我想把所有东西都移到include除了功能和调用线之外.

Smu*_*uuf 5

PHP手册说:

use关键字必须在文件的最外层范围(全局范围)或命名空间内声明中声明.[...] 导入规则是基于文件的,这意味着包含的文件不会继承父文件的导入规则.

"Importing rules are per file basis"部分是重要的一部分.

可以 use PHPMailer\PHPMailer\PHPMailer在您的include文件中,但这只意味着PHPMailer (无需指定完整的类名)将在您的include文件中可用,而不是在父文件 (包含您的include文件的文件)中.

TL;博士

你需要指定use ...;的语句每次你想要的特定文件use申请.

  • 别客气.而且它不是坏事.;)如果你真的想摆脱那些`use`语句,就不要"使用"它们并在代码中用它们的全名引用那些类.它会以任何方式工作. (2认同)