Почему доктрина 2.2 использует -namespace- и -use- без каких-либо операторов include или require? - PullRequest
0 голосов
/ 23 февраля 2012

Я изучаю пространство имен в php и Doctrine 2.2 в течение недели.

Я просмотрел несколько блогов и прочитал несколько статей о пространстве имен в php.

Я понимаю, что когда мы хотим использовать разные пространства имен на разных php-страницах, мы должны написать: include('php page that belong namespace we want to use');

Но Doctrine 2.2 не использует никаких операторов include, require или require_once для использования пространства имен. Почти все сценарии в Doctrine 2.2 таковы:

Doctrine \ 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 .

нет операторов include или require.

Но при запуске страницы (Doctrine \ ORM \ EntityManager.php) появляются фатальные ошибки,

Неустранимая ошибка: интерфейс «Doctrine \ Common \ Persistence \ ObjectManager» не найден в C: \ xampp \ htdocs \ www \ DoctrineExplained \ DoctrineORM \ Doctrine \ ORM \ EntityManager.php в строке 45

Хотя Doctrine 2.2 является стабильной версией Doctrine ORM , почему не используется include или require для пространств имен и use с?

1 Ответ

1 голос
/ 23 февраля 2012

Большая часть кода PHP 5.3 существует именно так. Доктрина ожидает, что автозагрузка будет настроена до того, как вы начнете ее использовать. Вы можете определить свою собственную функцию __autoload (), использовать spl_register_autoload () или использовать одну из реализаций, связанных со многими из этих фреймворков.

Это можно сделать и надолго. Прошло время, прежде чем соглашения были адаптированы, и пространства имен подтолкнули к этому изменению.

...