如何在PHP中包含命名空间文件?

时间:2012-05-09 08:06:36

标签: php apache2 doctrine-orm xampp

我在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();
  ?>

那是行不通的......我总会得到以下错误:

  

找不到类'TestModel'!

我现在添加:

index.php中的

include_once 'Models/TestModel.php'

include_once '..Controllers/TestController.php'中的TestModel.php 然后它有效......

文件夹结构:

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

但我真的必须指定文件的每个时间吗?

3 个答案:

答案 0 :(得分:1)

是的,您将始终必须包含定义类的文件。

命名空间只是将类打包在一起的一种方式,而不是自动包含PHP文件的方法。

如果您正在寻找一种在需要时自动包含PHP文件的方法,请查看autoload

答案 1 :(得分:0)

命名空间逻辑将代码分成不同的......好吧,命名空间。它与包含该命名空间代码的文件无关。所以,是的,除了命名空间之外,你还需要以某种方式include文件(例如自动加载器)

答案 2 :(得分:0)

另一种方法是使用自动加载器(http://php.net/manual/en/language.oop5.autoload.php)。你可以在那里找到一些好的开源自动加载器。