为什么doctrine 2.2使用-namespace-和-use-而没有任何include或require语句?

时间:2012-02-23 00:58:46

标签: php doctrine-orm namespaces doctrine php-5.3

我正在研究php中的命名空间和 Doctrine 2.2 一周。

我浏览了几个博客,并在php中阅读了几篇关于命名空间的文章。

据我所知,当我们想在不同的php页面中使用不同的名称空间时,我们必须写:include('php page that belong namespace we want to use');

但是,Doctrine 2.2不使用任何includerequirerequire_once语句来使用命名空间。几乎所有 Doctrine 2.2 中的脚本都是这样的:

学说\ ORM \ EntityManager.php

<?php
namespace Doctrine\ORM;

use Closure, Exception,
    Doctrine\Common\EventManager,
    Doctrine\Common\Persistence\ObjectManager,
    Doctrine\DBAL\Connection,
    Doctrine\DBAL\LockMode,
    Doctrine\ORM\Mapping\ClassMetadata,
    Doctrine\ORM\Mapping\ClassMetadataFactory,
    Doctrine\ORM\Query\ResultSetMapping,
    Doctrine\ORM\Proxy\ProxyFactory,
    Doctrine\ORM\Query\FilterCollection;
class EntityManager implements ObjectManager
{
    /**
     * The used Configuration.
     *
     * @var \Doctrine\ORM\Configuration
    .............
    ..................................
    ..................................
    ..................................
    ..................................
?>

Doctrine 2.2 中没有includerequire声明。

但是我们运行页面(Doctrine \ ORM \ EntityManager.php)会出现致命错误,

  

致命错误:找不到接口'Doctrine \ Common \ Persistence \ ObjectManager'       在第45行的C:\ xampp \ htdocs \ www \ DoctrineExplained \ DoctrineORM \ Doctrine \ ORM \ EntityManager.php

虽然 Doctrine 2.2 Doctrine ORM 的稳定版本,但为什么不将includerequire用于名称空间和{{1} } S'

1 个答案:

答案 0 :(得分:1)

大多数PHP 5.3代码都是这样的。 Doctrine希望在开始使用之前设置自动加载。您可以定义自己的__autoload()函数,使用spl_register_autoload()或使用与许多框架捆绑在一起的实现之一。

这也可以做很长时间。在公约进行调整之前花了一些时间,命名空间推动了这一变化。