为什么`require`和`use`不能写在函数体中?

时间:2015-12-04 12:27:57

标签: php namespaces

文件1:

<?php
    function done() {
        require_once '/home/vendor/autoload.php';
        use Qiniu\Auth;
        use Qiniu\Storage\UploadManager;
        #omitted
        }
?>

file2的

<?php
    require_once '/home/vendor/autoload.php';
    use Qiniu\Auth;
    use Qiniu\Storage\UploadManager;
    function done() {
        #omitted
        }
?>

为什么file1不起作用?
它应该被重写为file2,为什么要求和使用可以写在函数体中?

1 个答案:

答案 0 :(得分:2)

因为from php doc

  

当包含文件时,它包含的代码将继承发生包含的行的变量范围。从那时起,调用文件中该行可用的任何变量都将在被调用文件中可用。但是,包含文件中定义的所有函数和类都具有全局范围。

对于use关键字,

适用相同的规则

在你的情况下声明isìnside函数限制vars的可见范围和在包含文件中声明的代码