为什么我的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除了功能和调用线之外.
PHP手册说:
use关键字必须在文件的最外层范围(全局范围)或命名空间内声明中声明.[...] 导入规则是基于文件的,这意味着包含的文件不会继承父文件的导入规则.
这"Importing rules are per file basis"部分是重要的一部分.
您可以 use PHPMailer\PHPMailer\PHPMailer在您的include文件中,但这只意味着PHPMailer (无需指定完整的类名)将在您的include文件中可用,而不是在父文件 (包含您的include文件的文件)中.
你需要指定use ...;的语句每次你想要的特定文件use申请.