V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Sponsored by
ShowMeBug
[福利] V2EXer 专属!在线代码笔面试 20 场
ShowMeBug,专业的在线代码面试平台,助力你快速识别神队友,高效面试不加班。

为了感谢 V2EX 小伙伴们的支持,特地大家提供了福利:ShowMeBug 在线笔面试场次 20 场,限时活动,快邀请你的小伙伴来薅羊毛吧!
Promoted by ShowMeBug
a7dog
V2EX  ›  PHP

PHP Class 使用全命名空间有什么坏处?

  •  
  •   a7dog · 63 天前 · 1899 次点击
    这是一个创建于 63 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一般的代码都是先 use 然后使用,但是这种不大好替换,搜索相关代码调用也不是很明了,我一般直接使用全路径,方便替换,比如 如果 User 要改成 Staff,可以全局搜索\ModelSpace\User 。 使用方法 2, 有什么不好的地方呢?很少看到别人这样做。

    // 方法 1
    use ModelSpace\User;
    
    User::find($id)
    
    // vs
    // 方法 2
    \ModelSpace\User::find($id);
    
    29 条回复    2021-02-19 19:06:33 +08:00
    qwertyzzz
        1
    qwertyzzz   63 天前
    a7dog
        2
    a7dog   63 天前
    @qwertyzzz 看习惯也还行,一看就知道是属于哪里的
    334132462
        3
    334132462   63 天前
    唯一缺点 可能取类名时得想很久
    keepeye
        4
    keepeye   63 天前
    都感觉有点陌生了,两年多没写 PHP 了
    Makoto
        5
    Makoto   63 天前
    这样真的感觉很长,而且代码量比较重复
    lovecy
        6
    lovecy   63 天前
    有工具插件能自动补全也还行,
    a7dog
        7
    a7dog   63 天前
    @Makoto 也就是 namespace 重复,但是实际上就是一个字母,并不长
    agdhole
        8
    agdhole   63 天前
    全局替换你直接替换 use 的不也可以吗?
    a7dog
        9
    a7dog   63 天前
    @agdhole 换 use 的,对应使用的的 class 会自动改吗,或者有插件可以实现这个功能?比如

    use ModelSpace\User; 变成了 use ModelSpace\Staff,

    User::find($id) 会自动变成 Staff::find($id) ?
    agdhole
        10
    agdhole   63 天前
    @a7dog #9 使用 phpstorm 重构功能
    junan0708
        11
    junan0708   63 天前
    use ModelSpace\Staff as User 。不是更简单?
    BeautifulSoap
        12
    BeautifulSoap   63 天前
    所以说这不就体现了 IDE 的优点了

    用 IDE 的话把 User 改名了,它会自动分析其他代码将所有引用了 User 的地方自动改成 Staff
    lap510200
        13
    lap510200   63 天前
    第一种配合 ide 用就很方便和稳,第二种和每个类起唯一名没啥区别
    a7dog
        14
    a7dog   63 天前
    @junan0708 这样感觉不好,如果改名,会全部改
    a7dog
        15
    a7dog   63 天前
    @BeautifulSoap 这就很强大了,VSC 还没看到这个功能
    drush
        16
    drush   63 天前
    @junan0708 #11 接手的人怕会天天想念你
    debuggerx
        17
    debuggerx   63 天前
    1. 即使是只有自己会看会写的代码,最好也不要抱着“看习惯也还行”的想法写大多数人不习惯的代码,否则写别的代码的时候也会缺乏规范意识。
    2. 善用 IDE,编辑器终归只是编辑器。想想那么多人宁愿花钱用 IDE 都不选免费的 vsc 就知道,差距还是不小的。
    a7dog
        18
    a7dog   63 天前
    @debuggerx 实际上只有 model 类的代码会这样,团队 4 人,实际开发中感觉没有什么不便。
    changz
        19
    changz   63 天前 via Android
    😏
    BeautifulSoap
        20
    BeautifulSoap   62 天前
    @a7dog VSC 也只是编辑器,基于文本的查找替换行,但是涉及到变量重命名这种场景的时候,是需要编辑器分析理解整个项目代码的,这种重量级的功能需求还是主流 IDE 才行
    sanqian
        21
    sanqian   62 天前
    这样真的丑。。
    klgd
        22
    klgd   62 天前
    @keepeye #4 两年? 是 10 年吧 php 的命名空间是 5.3 时引入的 现在都 8 了
    keepeye
        23
    keepeye   62 天前
    @klgd 我是说两年没写 php 看代码有点生疏,不是说没接触过命名空间
    k396656156
        24
    k396656156   62 天前
    看不懂你要这样写,你改起来不是很麻烦,改漏了不是出问题了
    Still4
        25
    Still4   62 天前
    太长了,不方便看,你举的例子里面只用了一次,如果调用几十次,第一眼看过去,你自己都会骂哪个傻*这么写的,都不知道精简下

    use TencentAds\Model\AdsGetResponseData;
    use TencentAds\Model\AdvertiserGetListStruct;
    use TencentAds\Model\AdvertiserGetResponseData;
    use TencentAds\Model\BusinessManagerRelationsGetResponseData;
    use Google\Ads\GoogleAds\V5\Enums\AdGroupStatusEnum\AdGroupStatus;
    use Google\Ads\GoogleAds\V5\Enums\CampaignStatusEnum\CampaignStatus;

    给你看下某个广告库的代码,光是引用就这么长,意味着你要是看代码逻辑得拖到屏幕一半,心理负担太重
    guanhui07
        26
    guanhui07   62 天前
    use ModelSpace\Staff as User
    konakona
        27
    konakona   62 天前
    那是因为你没有用好的 IDE ! phpstorm,你重构一个类的名称,那么所有项目底下使用到这个类的都会自己改。
    a7dog
        28
    a7dog   62 天前
    @Still4 这么长应该会用 use 的,我们实际用全 namespace 只在一个字母的 namespace 情况下
    MengiNo
        29
    MengiNo   62 天前
    不过现在 IDE 补全的时候都会自动导包吧... 就算是第二种写法 只要写个 User::find 后面选好补全后,IDE 不就自己会去 use 一个叫 User 的类进来。我用 vscode 是比较习惯手动选包,但是 phpstorm 这种早就把代码分析好了,应该直接就可以回车补全 + 导包 同时完成吧。
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3015 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 81ms · UTC 05:31 · PVG 13:31 · LAX 22:31 · JFK 01:31
    ♥ Do have faith in what you're doing.