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

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

php 5.2 支持命名空间吗?

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

【问题讨论】:

标签: php namespaces php-5.2


【解决方案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。

          【讨论】:

            猜你喜欢
            • 2016-11-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-07-18
            • 2019-01-02
            • 2023-04-04
            • 2011-03-03
            • 2016-06-20
            相关资源
            最近更新 更多