2012-05-09 42 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!

當我現在補充一下:

中的index.php

include_once 'Models/TestModel.php'
AND
include_once '..Controllers/TestController.php' in TestModel.php
then then works ...

文件夾結構:

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/)。 - 你的代碼對於命名空間順便說一下看起來不錯,但是請記住,在你使用它之前,你需要首先在類中包含這個文件。 – hakre

+0

「,但請記住,在使用它之前,您需要首先將該文件包含在該類中」意味着我總是必須編寫include_once? – ok3n0b1

+0

通常Doctrine2應該自動處理(這就是所謂的自動加載)。我對Doctrine2不太瞭解,以至於我可以直接告訴你你的情況出了什麼問題(或者先看哪裏),但是我已經編輯了你的問題,希望它能夠更清晰並且會吸引更多的用戶。 – hakre

回答

1

是的,你將永遠不得不包含定義你的類的文件。

命名空間只是將你的類打包在一起的一種方式,而不是一種自動包含PHP文件的方式。

如果您正在尋找一種在需要時自動包含PHP文件的方法,請查看autoload

0

命名空間邏輯上單獨的代碼到不同的...好吧,命名空間。它與包含包含該名稱空間代碼的文件無關。所以是的,除了命名空間之外,你確實需要以某種方式對文件進行include(例如自動加載器)

相關問題