在 Typecho 中,利用 use 语法和下划线调用类是两种不同的类引用方式,它们有以下区别:
1. use 语句
use 是 PHP 的命名空间引入机制,用于在当前文件中引入其他命名空间的类:
use Typecho\Db;
use Typecho\Widget;
// 然后可以直接使用类名
$db = Db::get();
优点:
代码更简洁,直接使用短类名
符合现代 PHP 开发规范
IDE 支持更好,便于代码跳转和自动完成
2. 下划线类调用
Typecho 传统上使用下划线表示命名空间分隔:
// 使用下划线表示命名空间
$db = Typecho_Db::get();
特点:
这是Typecho 1.1.17 及更早版本的常用方式
不需要 use 语句,类名中包含完整命名空间路径
3. 两者关系
Typecho 1.1.17 尽量使用下划线的方式,1.2 以及后续版本同时支持这两种方式,它们本质上是等价的:
Typecho_Db::get(); // 传统下划线方式
\Typecho\Db::get(); // 命名空间方式(需要 use 语句更简洁)
4. 最佳实践
新项目:推荐使用 use + 命名空间方式,更符合现代 PHP 标准
旧项目维护:可以继续使用下划线方式保持一致性
插件开发:建议使用命名空间方式,除非需要兼容非常旧的 Typecho 版本
5. 示例对比
// 使用 use 和命名空间
namespace MyPlugin;
use Typecho\Plugin;
use Typecho\Db;
class MyClass extends Plugin\PluginAbstract
{
public function activate()
{
$db = Db::get();
// ...
}
}
// 使用下划线方式
class MyPlugin_MyClass extends Typecho_Plugin_PluginAbstract
{
public function activate()
{
$db = Typecho_Db::get();
// ...
}
}
在 Typecho 1.2.1 及更高版本中,两种方式都可以正常工作,当然,在新版本中,命名空间方式是更推荐的做法。