【问题标题】:How manage annoying Namespace and Class name redundancy on PHP and PSR-4如何在 PHP 和 PSR-4 上管理烦人的命名空间和类名冗余
【发布时间】:2020-10-14 22:54:33
【问题描述】:

在我的许多PHP微库中,都有与项目名匹配的Class,它创建了一个奇怪的全限定类名,看看这个

<?php
namespace Javanile\MysqlImport;

class MysqlImport {
 ...
}

然后当我使用这个类时,我有烦人的双重名称重复

<?php

$importer = new \Javanile\MysqlImport\MysqlImport(...);

// OR (EVEN BAD)

use Javanile\MysqlImport\MysqlImport;
$importer = new MysqlImport(...);

根据 PSR-4,我们有:

  • Javanile: 是供应商名称
  • MysqlImport: 是它修复项目名的子包名
  • MysqlImport: 是库的主体类

请支持我处理项目和主体类名在完全限定类名上的烦人的双重重复。太糟糕了,正确的做法是什么? (我不想想出随机的类名来避免它)

【问题讨论】:

  • use 语句到底有什么问题?无论如何,大多数编辑都会为您添加它们。如果你不喜欢它的名字,你也可以给这个类起别名。
  • 没有语法错误,对我来说很吵,使用别名不会消除我的混乱,问题是 MysqlImport 有两次完整的类名,一个是项目名称,一个是它自己的类跨度>
  • 我不确定你在问什么。如果那是您的库,您可以根据需要更改类名本身或其名称空间/位置。如果那不是你的库,你真的别无选择:使用它的完全限定名称(通常不推荐)、正常导入它或给它取别名。无论如何,没有人会阅读use 语句,这并不意味着您的代码会变得难以阅读或因此而变得难以阅读。
  • 我讨厌在 PHP 库中有一个与项目同名的类

标签: php namespaces naming-conventions psr-4 verbosity


【解决方案1】:

这没有错,但是如果你想要更干净的项目,你可以重新组织你的项目结构。例如:

Javanile
|__Importers
   |__ Mysql.php <-- Mysql class with main logic
   |__ Mysql <-- Folder with special MySQL logic, used in Mysql.php
      |__ MysqlHelperThings.php
      |__ SomethingElseForMysql.php

使用这种结构,您的use 路径将看起来像use Javanile\Importers\Mysql;

【讨论】:

    猜你喜欢
    • 2014-11-12
    • 2015-08-23
    • 1970-01-01
    • 2016-01-22
    • 2015-09-04
    • 2017-01-18
    • 2023-03-25
    • 2015-12-03
    • 2012-09-05
    相关资源
    最近更新 更多