php 5.2 中的命名空间

Posted

技术标签:

【中文标题】php 5.2 中的命名空间【英文标题】:Namespaces in php 5.2 【发布时间】:2011-09-22 07:42:30 【问题描述】:

我用命名空间做了一点网络。我的电脑里有它,我正准备把它移到使用 php 5.2 的免费主机上。 php 5.2 的语法高亮显示将它们解释为错误。

php 5.2 支持命名空间吗?

如果没有,有什么方法可以在对现有代码稍加改动的情况下使用它们?

【问题讨论】:

没有。阅读这本可爱的手册:php.net/manual/en/language.namespaces.php 虽然不支持,但您当然可以删除它们。碰巧最近出现了这种情况:***.com/questions/1836387/… - 不确定您是否要求这样做,或者这是否真的只是语法高亮? PHP 预处理器听起来不错。但我也使用该脚本未处理的变量类名。 【参考方案1】:

我刚刚遇到这个问题,我自己开发了一个图像上传脚本并添加了一些第三方代码来帮助图像处理(裁剪),但它们使用命名空间,在我的开发机器上工作正常,但是当我上传到实时服务器时我收到一个解析错误。

幸运的是我的主机支持 php 5.3 和 5.4,所以我要求他们为我将其更改为 5.3,我希望这能解决我遇到的问题,只需删除命名空间就会导致脚本失败:(

保罗

【讨论】:

【参考方案2】:

命名空间仅在 5.3 中可用

至少在类的情况下,您可以使用class_exists 函数来检查一个类是否已经在全局命名空间中定义了具有相似名称的名称。结合__autoload() 函数,您可以创建一个通用别名,并让系统检查以原始名称命名的类以及带有某种额外标识符的名称。我以“ns”为例。

function __autoload($class)
  try
     require_once('ns'.$class.'.php');
  catch(Exception $e)
     echo 'The class is unavailable in pseudo-namespace as well as global';
  

只需确保 require 路径指向您保存模型的任何位置。您也可以使用其他文件夹而不是别名。

这样,任何重复的类都可以放入与主执行分开的文件中,只有当它们不存在于全局中时才会包含它们。虽然这并不能严格解决必须物理重命名类的问题,但它允许您将定义放在不同的目录中以进行版本控制等。

【讨论】:

【参考方案3】:

命名空间在 PHP 中可用 PHP 5.3.0。

来源:http://www.php.net/manual/en/language.namespaces.rationale.php

【讨论】:

【参考方案4】:

http://www.php.net/manual/en/language.namespaces.rationale.php

名称空间从 PHP 5.3.0 开始在 PHP 中可用。

【讨论】:

【参考方案5】:

5.3 之前的版本不支持命名空间。不幸的是,没有办法让它们适应 5.2。

【讨论】:

以上是关于php 5.2 中的命名空间的主要内容,如果未能解决你的问题,请参考以下文章

BackSlash(\),PHP 中命名空间别名中的命名空间分隔符

PHP中的命名空间

PHP中的命名空间

php中的namespace 命名空间

说说PHP中的命名空间相关概念

php命名空间