2

我在 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”!

当我现在添加:

include_once 'Models/TestModel.php'在index.php
中 然后它可以工作......
include_once '..Controllers/TestController.php'TestModel.php

文件夹结构:

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

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

4

3 回答 3

1

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

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

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

于 2012-05-09T08:18:03.733 回答
0

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

于 2012-05-09T09:13:50.340 回答
0

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

于 2012-05-09T08:17:31.710 回答