命名空间和特征

时间:2014-01-06 23:58:19

标签: php namespaces traits

我使用特征和命名空间时出错,因为无法找到特征。

的index.php:

require_once 'src/App.php';
use App\main;

$App = new App();

的src / App.php

namespace App\main;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'DataBase.php';
/**
 * code
 */

的src / database.php中

namespace App\DataBase;

require_once __DIR__ . DIRECTORY_SEPARATOR . 'Singleton.php';

class DataBase {
  use Singleton; // or use App\Singleton

  /**
   * code
   */
}

的src / Singleton.php

namespace App\Singleton.php;
trait Singleton {
  /**
   * code
   */
}

但是,当我从Index.php运行它时,我收到了这个错误:

Fatal error: Trait 'App\DataBase\Singleton' not found in (...)

我该如何解决?

修改

Php会自动在命名空间中设置类名,例如:

Bar.php

namespace App;
class Bar {
  /**
   * code
   */
}

当你调用这个包时,你可以使用App \ Bar,这意味着默认情况下会设置这些类。

1 个答案:

答案 0 :(得分:10)

您没有在App\Singleton\Singleton命名空间中导入(或在PHP用语中使用 -ing)App\DataBase符号,因此PHP假定Singleton在相同的命名空间。

src/DataBase.php ...

namespace App\DataBase;

use App\Singleton\Singleton;

require_once __DIR__ . '/Singleton.php';

class DataBase {
    use Singleton;

    // and so on

此外,我强烈建议您实施自动加载器策略(最好是PSR-0)以避免所有require_once次呼叫。

更新

澄清一下,当你这样做时......

namespace App\DataBase;

class DataBase { ... }

此课程的全名是\App\DataBase\DataBasenamespace声明不包含类/特征名称。