我使用特征和命名空间时出错,因为无法找到特征。
的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,这意味着默认情况下会设置这些类。
答案 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\DataBase
。 namespace
声明不包含类/特征名称。