2012-05-09 45 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(例如自动加载器)

相关问题