【问题标题】:PHP reserved words as namespaces and class namesPHP 保留字作为命名空间和类名
【发布时间】:2012-08-01 06:52:45
【问题描述】:

最近我开始将我的框架转换为使用 php 命名空间,一个我似乎无法找到答案的问题是 - 使用保留字如“对象”、“数组”是否“合法” , 'String' 作为该命名空间内的命名空间和类名?一个例子是:

namespace System\Object;


class String { }

class Array { }

【问题讨论】:

  • 你试过了吗?我敢肯定,如果 PHP 是非法的,PHP 会骂你。

标签: php namespaces reserved-words


【解决方案1】:

PHP 会抛出如下错误:

Parse error: syntax error, unexpected T_ARRAY, expecting T_STRING

如果你尝试:

class Array
{

}
$myClass = new Array;

相反,尝试类似

class myArray
{

}
$myClass = new myArray;

[edit] 我会详细说明一下,它们被保留是有原因的,因为在上面的第一个场景中,PHP 无法区分定义数组或初始化类同名,所以会报错。没有办法像在 MySQL 中那样解决这个问题,例如,您可以使用反引号来转义保留字。所以在 PHP 中你不得不改变名字,你不必改变太多,只要你不使用与保留字完全相同的名字,一个字符就可以了。

希望有帮助!

【讨论】:

  • 感谢 Stu - 我就是这么想的,但无法用我的框架对其进行正确测试,因为目前在转换所有内容时存在很多问题。
  • 我之前使用过类 Object 没有问题,尽管我只是扩展了它,从未实际直接创建过。
  • @gunnx,这很有趣......我之前没有尝试过,但我想因为你没有明确地调用它,它不会通过与调用类从相同的路径php 本身,这可能就是它通过的原因。虽然我不建议使用保留名称以防万一您将来需要扩展应用程序,但您永远不能调用该类并重命名它会在整个应用程序中迭代它会很痛苦。
  • 不,看来 Object 不是保留字,我的错! new String 会抛出错误,但 new Object 不会,因为它不在保留关键字列表中:php.net/manual/en/reserved.keywords.php
  • 是的,我决定在我的新项目中使用 Entity 作为我的基类而不是 Object。数组肯定不起作用:)
猜你喜欢
  • 1970-01-01
  • 2012-08-10
  • 2014-08-12
  • 2020-09-20
  • 2016-03-25
  • 2012-03-28
  • 2010-11-27
  • 2012-10-14
  • 1970-01-01
相关资源
最近更新 更多