在PHP

时间:2018-01-15 13:10:55

标签: php

我有两个简单的文件:

file1.php

<?php
namespace NM\data;
class MyClass
{
    static function myStaticFunction(){
        echo __NAMESPACE__." heheh";
    }
}
function myfunction()
{
    echo __FUNCTION__." some data";
}
const MYCONST = 1;

和file2.php:

<?php
// include 'file1.php';
use NM\data as NM;
class MyClass
{
}
function myfunction()
{
    echo __NAMESPACE__." heheh";
}
const MYCONST = 2;
echo NM\myfunction();

文档说您可以使用use作为名称空间的导入命令。 http://php.net/manual/en/language.namespaces.importing.php

我只用use导入名称空间几乎没有成功。对于要使用的其他名称空间,我必须使用include。但是,如果我使用include,则use仅执行别名。

是否可以使用use关键字导入命名空间?

2 个答案:

答案 0 :(得分:2)

  

但如果我使用use,则use只会执行别名。

是的,那是use的全部。 $form->submit($request->request->get($form->getName()), false); 只是别名空间。不多也不少。它与从文件中实际加载任何代码片段是正交的。

答案 1 :(得分:1)

实际上有一种方法可以做到这一点。阅读PHP中的自动加载功能,我建议您查看PSR-4 Autoloading

在PHP 5.3之前,没有命名空间,因此include函数加载了文件。在那个时候我们有PSR-0,它按照它的名字加载文件,但这导致了诸如“Mage_Admin_Model_Block”之类的长类名。 (这被解析为位于“Mage / Admin / Model / Block.php”目录中的文件

在php 5.3+中引入了名称空间,引入了新的自动加载标准,它使用名称空间来解析包含我们想要使用的类的定义的文件路径。

例如这个 use Symfony\Bundle\FrameworkBundle\Controller\Controller

解析为:'Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller.php`

因此,PHP不知道类文件的位置,但使用自动加载器,它可以解析该文件的存在位置,并在需要时加载它。你可以写你自己的代码,但我强烈建议坚持PSR-4标准(PSR-0现在已经过时)