我正在php和条令2.2中学习命名空间一周。
我浏览了几个博客,阅读了几篇关于php中命名空间的文章。
我知道,当我们想在不同的php页面中使用不同的名称空间时,我们必须写:include('php page that belong namespace we want to use');
但是条令2.2没有使用任何include
、require
或require_once
语句来使用名称空间。条令2.2中的几乎所有脚本都是这样的:
条令\ORM\EntityManager.php
<?php
namespace DoctrineORM;
use Closure, Exception,
DoctrineCommonEventManager,
DoctrineCommonPersistenceObjectManager,
DoctrineDBALConnection,
DoctrineDBALLockMode,
DoctrineORMMappingClassMetadata,
DoctrineORMMappingClassMetadataFactory,
DoctrineORMQueryResultSetMapping,
DoctrineORMProxyProxyFactory,
DoctrineORMQueryFilterCollection;
class EntityManager implements ObjectManager
{
/**
* The used Configuration.
*
* @var DoctrineORMConfiguration
.............
..................................
..................................
..................................
..................................
?>
条令2.2中没有任何include
或require
声明。
但我们运行的页面(Doctrine\ORM\EntityManager.php)出现致命错误,
致命错误:找不到接口"Doctrine\Common\Persistence\ObjectManager"在第45行上的C:\examplep\htdocs\www\DoctrineExplaine\Doctrine RM\Doctrinet\ORM\EntityManager.php中
尽管Doctrine 2.2是Doctrine ORM的稳定版本,为什么不将include
或require
用于命名空间和use
?
大多数PHP 5.3代码都是这样的。Doctrine希望在开始使用之前设置好自动加载。您可以定义自己的__autoload()函数,使用spl_register_autoload()或使用与许多框架捆绑在一起的实现之一。
这也可以持续很长一段时间。只是花了一段时间才对约定进行调整,并推动名称空间进行更改。