PHP保留字作为名称空间和类名

PHP保留字作为名称空间和类名,php,namespaces,reserved-words,Php,Namespaces,Reserved Words,最近,我开始将我的框架转换为使用php名称空间,我似乎找不到答案的一个问题是:在该名称空间中使用诸如“Object”、“Array”、“String”等保留字作为名称空间和类名是否“合法”?例如: namespace System\Object; class String { } class Array { } PHP将抛出如下错误: Parse error: syntax error, unexpected T_ARRAY, expecting T_STRING 如果您尝试: cla

最近,我开始将我的框架转换为使用php名称空间,我似乎找不到答案的一个问题是:在该名称空间中使用诸如“Object”、“Array”、“String”等保留字作为名称空间和类名是否“合法”?例如:

namespace System\Object;


class String { }

class Array { }

PHP将抛出如下错误:

Parse error: syntax error, unexpected T_ARRAY, expecting T_STRING
如果您尝试:

class Array
{

}
$myClass = new Array;
相反,尝试类似的方法

class myArray
{

}
$myClass = new myArray;
[编辑]我会详细说明一下,保留它们是有原因的,因为在上面的第一个场景中,PHP无法区分定义数组和初始化同名类之间的区别,因此会抛出错误。例如,在MySQL中,没有办法绕过这一点,在MySQL中,您可以使用反勾号来转义保留字。因此,在PHP中,您必须更改名称,不必做太多更改,只要您没有使用与保留字完全相同的名称,一个字符就可以了


希望有帮助

你试过了吗?我敢肯定,若PHP是非法的,它会对你们大喊大叫。谢谢斯图-这是我想的,但我不能用我的框架对它进行正确的测试,因为在我转换所有东西的时候,现在有很多问题。我以前使用过类对象,但我只是扩展了它,从来并没有直接创建过。@gunnx,那很有趣。。。我以前没有尝试过,但我想,因为您没有显式地调用它,所以它没有通过与从php本身调用类相同的路径,这可能就是它通过的原因。虽然我不建议使用保留名称,以防将来需要扩展应用程序,但你永远不能调用该类并重命名它,在整个应用程序中重复该类将是一件痛苦的事情。不,似乎Object不是保留字,我的错
new String
抛出错误,但
new Object
没有,因为它不在保留关键字列表中:是的,我决定在我的新项目中使用Entity作为基类,而不是Object。数组肯定不起作用:)