ddyy
V2EX  ›  PHP

所有使用 namespace 的 php 框架,一律无视

  •  
  •   ddyy · May 12, 2014 · 10953 views
    This topic created in 4560 days ago, the information mentioned may be changed or developed.
    php的命名空间是全世界最丑陋最难用的命名空间,亲爱的Yii 2.0也开始使用namespace了,Yii已死,有事烧纸。
    40 replies  •  2014-05-14 23:33:22 +08:00
    lizheming
    lizheming
    May 12, 2014❤️1
    1
    好吧,其实我也是....看到用namespace的就觉得蛋疼...
    barbery
    barbery
    May 12, 2014
    2
    我觉得namespace好用啊,不过sublime 等IDE都不会识别倒是真的。。。
    66beta
    66beta
    May 12, 2014
    3
    还好吧,只是在我朝的虚拟主机上,全部死
    ddyy
    ddyy
    OP
    May 12, 2014
    4
    @barbery 如果用过python的namespace,对php的namespace看都不愿看一眼。ruby的namespace都比php的好用
    saharabear
    saharabear
    May 12, 2014
    5
    为什么说难用?
    nantmpeter
    nantmpeter
    May 12, 2014
    6
    求科普下,卤煮,让我等涨涨姿势
    CoX
    CoX
    May 12, 2014
    7
    那是不是只剩下CodeIgniter了
    h2ero
    h2ero
    May 12, 2014
    8
    很好用啊, 不支持namespace的框架现在还有人会用。
    raincious
    raincious
    May 12, 2014
    9
    习惯了就好。已经看着这些namespace一年多了,默默地接受了,连自己的框架都支持了……当然楼主肯定是不会用的……

    其实我觉得挺好的啊,把它当路径标识符用呗。
    h2ero
    h2ero
    May 12, 2014
    10
    现在流行的框架有几个没有用, 轻的重的,Zend Framework都用了。
    ddyy
    ddyy
    OP
    May 12, 2014
    11
    @raincious 用 “/” 都比用 “\” 好看,起码有路径的感觉,搞不明白当初为什么不用 / 反而选择了别扭的 \ ,听说委员会还是激烈争论以后决定使用 \
    ddyy
    ddyy
    OP
    May 12, 2014
    12
    @h2ero 框架在源代码里用是他们的事,别逼着用户使用框架的时候再引用一串 \ 就行,违和感太强烈了,使用命名前缀都比反斜线美观
    ddyy
    ddyy
    OP
    May 12, 2014❤️1
    13
    当然,有审美洁癖的人用php本身就是自虐
    andyhu
    andyhu
    May 12, 2014
    14
    个人习惯的问题,namespace比那种直接CXxxx的命名其实优雅很多,勇夺了就知道了
    andyhu
    andyhu
    May 12, 2014
    15
    更正错字,用多了
    Monad
    Monad
    May 12, 2014 via iPhone
    16
    cxx 路过
    谁能举个例子 我没看懂
    莫非是yii\framework\listener这样的?
    leveraging
    leveraging
    May 12, 2014
    17
    结合composer命名空间挺无痛的。完全能分离目录和命名的关系。心随我动。用了可能有不舒服的地方,但是总比没用舒服多了。
    Sunyanzi
    Sunyanzi
    May 12, 2014❤️1
    18
    这又是准备吵一场的节奏么 ... 嘛 ... 你要战那便战吧 ...

    其实如果不拿 php 的 namespace 当个 namespace 而只是当个 prefix 的话还是挺好用的 ...

    这东西作为一个 namespace 显然不够格 ... 但说它全世界最丑陋最难用 ... 怕也有失公允 ...

    用我手边的代码举个栗子 ... 随便截了几行见下图 ...



    那么聪明的你告诉我 ... 如果没有 namespace ... 这些类的 autoloading 如何做 ..?

    都堆在同一个路径下 ..? 定义一个非常非常非常长的类名 ..? 写配置文件做依赖注入 ..?

    虽然现在这个 namespace 的实现方式也不怎么优雅 ... 但至少比上面提及的三个方式要好多了 ...

    至于 backslash 这个事情 ... 我也不喜欢 ...

    但原因并不是因为不好看 ... 而是每次我在字符串里写命名空间的时候要写成 \\ 这样 ...

    但没有办法 ... php 的领域里已经没有另外的特殊字符可以用作 namespace 了 ...

    不管你喜欢与否这已经是无可改变的事实 ... 如果觉得实在无法接受请再也不要碰 php ...

    相比起你不喜欢这个语法 ... 我更不喜欢的是对 namespace 的滥用 ...

    一个文件一打开就是五十多行 use ... 不读代码 ... 光那个视觉效果就够让人目眩神迷了 ...

    总而言之虽然 php 的 namespace 语法被广为诟病 ... 但也不是一无是处 ...

    要指责的话指责那些写出烂程序的人去 ... namespace 好端端的招你惹你了冲它发什么火儿 ...
    aisk
    aisk
    May 12, 2014
    19
    @ddyy / 的话和除操作会不会冲突?
    raincious
    raincious
    May 12, 2014
    20
    @Sunyanzi 你可以不用\\这样写,照样能识别啊,又不会把A-Z转义了,难道有规范说必须写?。

    ddyy
    ddyy
    OP
    May 12, 2014 via Android
    21
    @aisk 解释器可以先判断是命名空间还是常量,解释型语言动态判断类型很常见啊,其他动态语言字符串相加和数字相加都用加号,其实这两个相加运算也是完全不同的
    crysng
    crysng
    May 12, 2014❤️1
    22
    php不是亏在namespace而是亏在.(dot)上面
    不然就不会出现object->method(),应该是object.method(),,(多敲了两下键盘)
    相对应的,namespace就应该是.(dot)而不是\backslash了,,哈哈

    这个.(dot)设计可能为当初的php4运行速度有所帮助吧
    Sunyanzi
    Sunyanzi
    May 12, 2014
    23
    @raincious 见 http://php.net/language.types.string ...

    「To specify a literal backslash, double it (\\).」

    虽然表现上确实没什么区别就是了 ...
    trimleo
    trimleo
    May 12, 2014
    24
    我感觉用着挺好的 配合composer 自动加载无压力
    raincious
    raincious
    May 12, 2014
    25
    @Sunyanzi 嗯……这个是这么说的呢嗯……

    我大概知道你为什么要这么玩,是不是你用双引号了?如果用双引号,同时的namespace里面有小写的对象名(外加第一个字符是rnt什么的话),那么真的会有玩托的风险。



    当然,我大单引号就没事,啊哈哈,这也是为啥我一直坚持单双引号严格区分的原因。
    lizheming
    lizheming
    May 12, 2014
    26
    @Sunyanzi 孙大大T_T...我只是单纯的不喜欢用反斜线而已T_T...感觉用下划线也比用反斜线要来的爽啊,一来看起来丑,而来打起来也麻烦,完全不习惯啊有没有...
    liuxurong
    liuxurong
    May 12, 2014
    27
    CodeIgniter欢迎你。
    soli
    soli
    May 12, 2014
    28
    @ddyy

    > 如果用过python的namespace,对php的namespace看都不愿看一眼。

    不能同意你更多。
    kenzi
    kenzi
    May 12, 2014 via iPad
    29
    写了五年 php, 不会 namespace 的飘过。。。 准备学习下了。。
    soli
    soli
    May 12, 2014
    30
    另外,use XX; 竟然不能像 C++ 那样,把这个命名空间下的所有类都引入进来。
    usedname
    usedname
    May 12, 2014 via Android
    31
    我觉得用起来很顺手啊,只是说它引入的太晚所以被喷的体无完肤了么?
    regmach
    regmach
    May 12, 2014
    32
    楼主有在什么YII群吗?
    vibbow
    vibbow
    May 13, 2014
    33
    其实 \ 在英国键盘上敲起来特别顺手...
    bakac
    bakac
    May 13, 2014
    34
    这个其实还好,可以autoload 没必要喷
    Yuansir
    Yuansir
    May 13, 2014
    35
    以前不习惯,后来用上Laravel,各种习惯了
    raincious
    raincious
    May 13, 2014
    36
    @soli

    你可以 use Name\Space\Solar;

    然后Solar\Planet,Solar\Sun,Solar\Moon啊。
    mikej
    mikej
    May 13, 2014
    37
    @Sunyanzi 你这里的引用是不是跟require效果一样呢?
    soli
    soli
    May 13, 2014
    38
    @raincious

    就是不想 Solar\ 哈。

    为什么不直接 Planet、Sun、Moon 呢?
    Sunyanzi
    Sunyanzi
    May 13, 2014
    39
    @mikej 事实上这并不是一个引用 ( reference ) ... 这只是命名空间声明 ...

    php 使用未定义的类的时候会触发 autoload ... 具体的加载方式由 autoload 函数决定 ...

    换言之是不是跟 require 效果一样是由你决定的 ... php 并不会自动 require ...
    mikej
    mikej
    May 14, 2014
    40
    @Sunyanzi 类的 autoloading 由 autoload函数决定,而namespace是解决了类/函数/常量的命名规范问题,这两者有什么关联,能否详细解释一下。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2892 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 12:05 · PVG 20:05 · LAX 04:05 · JFK 07:05
    ♥ Do have faith in what you're doing.