Php 为什么可以';t';使用';语句是否在包含文件中?
为什么我的Php 为什么可以';t';使用';语句是否在包含文件中?,php,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, $bod
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]
}
但是,当我尝试将这2条use
语句移动到我的PHPMailer_Loader.php脚本(位于文件的最底部)中时,它会出现以下错误:
Fatal error: Class 'PHPMailer' not found in [...]\EmailTester.php on line 12
为了整洁和紧凑,除了函数和调用行之外,我想将所有内容都放入
include
。PHP手册是这样说的:
use关键字必须在文件的最外层范围(全局范围)或命名空间声明内声明。[…]导入规则以每个文件为基础,这意味着包含的文件不会继承父文件的导入规则
“导入规则以每个文件为基础”
部分是此处的重要部分
您可以在include
文件中使用PHPMailer\PHPMailer\PHPMailer
,但这只意味着PHPMailer
(无需指定完整类名)将在include
文件中可用,而不在父文件中(包含include
文件的文件)
tl;博士
您需要指定您的
使用每个要应用特定的文件中的code>语句。可能是因为文件到phpmailerNo的路径错误,路径是正确的。如果不是,那么我的工作示例(如上所示)也不会工作。PHPMailer_Loader.php
是我定制的,它有我需要的设置和其他内容。我不需要使用PHPMailerAutoload.php
,没有它我的工作示例也可以正常工作。Composer是一个额外的安装和步骤,我不需要它。use
语句是每个文件的。不客气。也没那么糟如果你真的想摆脱那些use
语句,就不要“使用”它们,而是用它们的全名引用代码中的类。这两种方式都会奏效。