Php 命名空间运算符。。。什么';有什么大不了的?

Php 命名空间运算符。。。什么';有什么大不了的?,php,namespaces,Php,Namespaces,有人能给我解释一下使用反斜杠作为名称空间操作符到底有什么不好吗?我读了很多关于这件事的嘲讽的评论。一位StackOverflower甚至说他因为它放弃了PHP 是的,我知道反斜杠作为字符串中的转义字符有特殊的含义,但它实际上并不比在许多其他语言中使用->或点更糟糕 这让我想起了任天堂宣布Wii名字时对它的嘲笑。每个人都会大惊小怪,一旦大惊小怪了,你习惯了,没人在乎,他们就会继续前进 所以,请启发我。这有什么不好?你有什么建议吗?它有什么不好的地方:你能在下面的代码中发现错误吗 if(class_

有人能给我解释一下使用反斜杠作为名称空间操作符到底有什么不好吗?我读了很多关于这件事的嘲讽的评论。一位StackOverflower甚至说他因为它放弃了PHP

是的,我知道反斜杠作为字符串中的转义字符有特殊的含义,但它实际上并不比在许多其他语言中使用
->
或点
更糟糕

这让我想起了任天堂宣布Wii名字时对它的嘲笑。每个人都会大惊小怪,一旦大惊小怪了,你习惯了,没人在乎,他们就会继续前进


所以,请启发我。这有什么不好?你有什么建议吗?

它有什么不好的地方:你能在下面的代码中发现错误吗

if(class_exists("namespace1\namespace2\myClass"))
    echo "This will never be true";

我的建议是:不幸的是,“\”是唯一可用的字符。如果PHP6是我设计的,我会用关键字(因为它们使用得很少)替换所有的位运算符(^,&,|,~),并使用“|”作为名称空间分隔符。事实上,我建议对PHP进行更简单的语法更改,使其更易于阅读和编写,但只使用Python更容易…

它的问题是,它在几乎所有其他上下文中都是转义字符。这意味着人们会在不经意间把它弄糟,但这也会使阅读变得困难,因为你的眼睛会将反斜杠作为元字符来阅读,而不仅仅是另一个符号


我更喜欢三个冒号,这在某个时候实际上是有人建议的。

此外,如果我想要一种没有特别好的理由重新发明语法的语言,我会使用Ruby。

好吧,当使用“\”作为名称空间时,还有其他问题

  • 这是逃避角色。如果你 必须在“字符串”中使用\和\in “字符串”。我觉得有人会搞砸的 总有一天会这样。迟早。 这条船会抓住你的
  • 不是每个键盘上都有“\”的位置。在我的键盘上,我不得不使用一组键,它们之间并不十分接近,有时这只是一种痛苦。虽然没有“^”那么糟糕。换句话说,不可能流利地编写需要访问特定keymap上的名称空间的代码
  • 我记得他们投票的时候,结果是多么荒谬。他们选择它是因为它比其他字符更简单,并且需要更少的键入。老实说,这完全取决于你的键盘布局 这就是我能找到为什么使用转义字符可能是件坏事的全部原因。 老实说,我仍然在等待能够创建他自己的unicode符号的语言。因此,它将为您可以覆盖哪个操作符提供更大的灵活性。让我们说C++,你可以写一些类似的东西。p>
    bool operator ≤ (Dog dog);
    //and then do this
    if(myDog ≤ thisDog){
    }
    //Seems useful?
    bool operator ≅ thisDog){ 
      // this wouldn't check for equality 
      // but for something close to it
    }
    

    能够使用我们自己的任意运算符比使用+对事物进行分组更有意义……”∪" 会更有意义…如果你想得到十字路口,只有你”∩然后人们可能会说:“如果我们的字体中没有这些字符怎么办?”我只能回答:“找到一个有这些字符的字体!!!!”!!!!“

    让我们假设以下名称空间:jp\nintendo\rvl\testing

    jp\nintendo\rvl\testing 你注意到错误了吗

    实际(内部)命名空间很可能是这样的:

    jp intendo vl esting 太平绅士 本意 vl测试 解决方法是始终使用两个反斜杠作为名称空间分隔符,类似于我们在windows文件名中使用的方式

    使用两个反斜杠完全是有害的,因为它本身就是一个转义序列,它扩展为一个文本反斜杠,这是实际的名称空间分隔符


    现在,如果我们使用jp\\nintendo\\rvl\\testing作为名称空间(使用2个反斜杠作为分隔符),则实际的(内部的)名称空间变为:jp\nintendo\rvl\testing

    真正的问题是,他们为什么不把它作为/?我个人讨厌\因为它是一个转义字符…让我把一切都搞砸了!

    官方RFC和支持文档可以在

    jp\\nintendo\\rvl\\testing jp\nintendo\rvl\testing
    它们包括一个

    引用章节“问题”

    • \
      看起来很像
      /
      ,很容易意外翻转,尤其是对于unix用户
    • \
      用于转义
    • 在字符串中,名称空间名称变成
      \\this
      ,或者我们可以得到奇怪的字符。这可能会让用户一开始感到困惑
    • 所有现有的名称空间代码几乎都必须重写,不可能简单地搜索/替换
    • 该补丁涉及到很多引擎,需要进行严格的作战测试
    • 对许多人来说,
      \this\way
      一开始看起来很奇怪

    你提到的任何嘲弄性评论都可能是由于上述原因或个人观点造成的。例如,我觉得它们读起来很难看,写起来很麻烦,特别是在字符串中,我必须使用双反斜杠。但是,我也越来越习惯于使用它们。

    我发现\德国键盘上的按键不方便触摸。此外,没有其他语言(afaik)使用反斜杠作为ns分隔符,这导致了另一种做同样事情的方式略有不同。托比,因为这样一来,每一次事件都会发生。将需要转义。难道不能使用单引号使PHP不解析字符串文本中的任何文本吗?其他几种语言使用点字符作为名称空间分隔符,尽管它也是它们的主要OO分隔符-或者,换句话说,在不同的上下文中,它具有不同的含义。PHP6为什么不能使用->或。并检查上下文?不能使用点,因为在这样的语句中:MyNameSpace.MyClass将查找两个名为“MyNameSpace”和“MyClass”的常量,以便字符串相互附加(可能导致一些警告,然后是“MyNameSpace”)