2012-05-09 3 views
2

У меня проблема с PHP. Сначала я должен сказать, что я не являюсь опытным разработчиком PHP на этой планете.Как включить файлы с именами в PHP?

Мой код/​​Проблема заключается в том, как следует:

В файле Controllers\TestController.php:

<?php 
    namespace My\Test\Controllers; 

    class TestController 
    { 
    public function HelloTest() 
    { 
      echo 'Hello!'; 
    } 
    } 
?> 

Когда я хочу, чтобы включить этот класс в другой файл PHP как этот

Файл Models\TestModel.php:

<?php 
    namespace My\Test\Models; 
    use My\Test\Controllers;   

    class TestModel 
    { 
     public function TestModelFunction() 
     { 
     $control = new TestClass(); 
     $control->HelloTest(); 
     } 
    } 
?> 

index.php _

<?php 
     use My\Test\Models; 

     $model = new TestModel(); 
     $model->TestModelFunction(); 
    ?> 

Это просто не будет работать ... Я всегда получаю следующее сообщение об ошибке:

Class 'TestModel' not found!

Когда я теперь добавить:

include_once 'Models/TestModel.php' в index.php
И
include_once '..Controllers/TestController.php' in TestModel.php
затем он работает ...

Структура

Папки:

Project 
|-Models 
| TestModel.php 
|-Controllers 
| TestController.php 
|index.php 

Но я действительно должен указывать каждый раз, когда эти файлы?

+0

Этот сайт работает лучше всего, если вы задаете один вопрос одновременно. Пожалуйста, прочитайте [FAQ] (http://stackoverflow.com/faq). Еще одно рекомендуемое чтение: [Что вы пробовали?] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/). - Ваш код хорошо подходит для namespacing btw, но имейте в виду, что перед тем, как вы сможете его использовать, сначала нужно добавить файл с классом. – hakre

+0

", но имейте в виду, что вам нужно сначала включить файл с классом, прежде чем вы сможете его использовать." Значит, мне всегда приходится писать include_once? – ok3n0b1

+0

Обычно Doctrine2 должен позаботиться об этом автоматически (это называется автозагрузкой).Я не так хорошо разбираюсь в Doctrine2, что могу прямо сказать вам, что в вашем случае (или где искать в первую очередь), но я отредактировал ваш вопрос, чтобы он, надеюсь, был более ясным и привлечет больше пользователей. – hakre

ответ

1

Да, вы всегда должны включать файлы, которые определяют ваши классы.

Пространство имен - это всего лишь способ упаковки ваших классов вместе, а не способ автоматического включения файлов PHP.

Если вы ищете способ автоматического включения файлов PHP при необходимости, посмотрите на autoload.

0

Namespaces логически отдельный код в разные ... ну, пространств имен. Он не имеет никакого отношения к включению файлов, содержащих код для этого пространства имен. Так что да, вам нужно сделать include файл в том или ином виде (например, автозагрузчики) в дополнение к именам.

Смежные вопросы