Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么可以';t';使用';语句是否在包含文件中?_Php - Fatal编程技术网

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
语句,就不要“使用”它们,而是用它们的全名引用代码中的类。这两种方式都会奏效。