从一些示例代码开始,我不明白为什么这些场景都不起作用。
示例代码脚本名为script.php,该文件在从命令行运行时成功运行
<?php
//Script in standalone file: script.php
//...define some stuff
require REQUIRED_FILE;
use Aws\Ses\SesClient;
//now do some stuff
?>
当我将脚本的内容内联到我的大型程序中时,它在'use'部分失败。
<?php
//class-of-bigger-program.php
//function called from some other part of program
function foo(){
//paste the contents of the same script above
//...define some stuff
require REQUIRED_FILE;
use Aws\Ses\SesClient;//CRASH HERE
// now do some stuff
}
?>
但是,当将脚本包含在该较大程序的相同位置时,它可以正常工作。
<?php
//function called from some other part of program
function foo(){
//paste the contents of the same script above
include 'script.php';
}
?>
为什么会这样?我只是想错过使用'use'命令吗? 我发现'use'和'include'和命名空间之间的区别很难理解。
答案 0 :(得分:2)
The PHP documentation会很好地为您解释。知道为什么你做不了什么事情往往更有帮助,只知道你不能。
use关键字必须在文件的最外层范围(全局范围)或命名空间内声明中声明。这是因为导入是在编译时完成的,而不是运行时,所以它不能是块作用域。
换句话说,它在运行程序之前导入其他代码,因此它必须位于程序的最外层。
答案 1 :(得分:1)
为什么要在功能中添加用途?如果你的class-of-bigger-program.php
真的是一个班级,那么你应该这样做:
require REQUIRED_FILE;
use Aws\Ses\SesClient;
class YourClass {...}