Php 命名空间运算符。。。什么';有什么大不了的?
有人能给我解释一下使用反斜杠作为名称空间操作符到底有什么不好吗?我读了很多关于这件事的嘲讽的评论。一位StackOverflower甚至说他因为它放弃了PHP 是的,我知道反斜杠作为字符串中的转义字符有特殊的含义,但它实际上并不比在许多其他语言中使用Php 命名空间运算符。。。什么';有什么大不了的?,php,namespaces,Php,Namespaces,有人能给我解释一下使用反斜杠作为名称空间操作符到底有什么不好吗?我读了很多关于这件事的嘲讽的评论。一位StackOverflower甚至说他因为它放弃了PHP 是的,我知道反斜杠作为字符串中的转义字符有特殊的含义,但它实际上并不比在许多其他语言中使用->或点更糟糕 这让我想起了任天堂宣布Wii名字时对它的嘲笑。每个人都会大惊小怪,一旦大惊小怪了,你习惯了,没人在乎,他们就会继续前进 所以,请启发我。这有什么不好?你有什么建议吗?它有什么不好的地方:你能在下面的代码中发现错误吗 if(class_
->
或点
更糟糕
这让我想起了任天堂宣布Wii名字时对它的嘲笑。每个人都会大惊小怪,一旦大惊小怪了,你习惯了,没人在乎,他们就会继续前进
所以,请启发我。这有什么不好?你有什么建议吗?它有什么不好的地方:你能在下面的代码中发现错误吗
if(class_exists("namespace1\namespace2\myClass"))
echo "This will never be true";
我的建议是:不幸的是,“\”是唯一可用的字符。如果PHP6是我设计的,我会用关键字(因为它们使用得很少)替换所有的位运算符(^,&,|,~),并使用“|”作为名称空间分隔符。事实上,我建议对PHP进行更简单的语法更改,使其更易于阅读和编写,但只使用Python更容易…它的问题是,它在几乎所有其他上下文中都是转义字符。这意味着人们会在不经意间把它弄糟,但这也会使阅读变得困难,因为你的眼睛会将反斜杠作为元字符来阅读,而不仅仅是另一个符号
我更喜欢三个冒号,这在某个时候实际上是有人建议的。此外,如果我想要一种没有特别好的理由重新发明语法的语言,我会使用Ruby。好吧,当使用“\”作为名称空间时,还有其他问题
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”)