我有两个简单的文件:
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
关键字导入命名空间?
答案 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现在已经过时)