当我将示例代码放入函数时,为什么php'使用'会失败?

时间:2016-04-19 22:22:00

标签: php

从一些示例代码开始,我不明白为什么这些场景都不起作用。

示例代码脚本名为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'和命名空间之间的区别很难理解。

2 个答案:

答案 0 :(得分:2)

The PHP documentation会很好地为您解释。知道为什么你做不了什么事情往往更有帮助,只知道你不能。

  

use关键字必须在文件的最外层范围(全局范围)或命名空间内声明中声明。这是因为导入是在编译时完成的,而不是运行时,所以它不能是块作用域。

换句话说,它在运行程序之前导入其他代码,因此它必须位于程序的最外层。

答案 1 :(得分:1)

为什么要在功能中添加用途?如果你的class-of-bigger-program.php真的是一个班级,那么你应该这样做:

require REQUIRED_FILE; 
use Aws\Ses\SesClient; 

class YourClass {...}