dto52236 2014-02-23 12:25
浏览 77
已采纳

在PHP中处理两次声明类

I am using the 3rd party ostickets application. Line 17 of include/class.passwd.php includes the code require_once(INCLUDE_DIR.'PasswordHash.php'); which creates an object using class PasswordHash {...}.

My problem is I use the 3rd party class PashwordHash earlier in my script independently of ostickets, and my first use of the PasswordHash needs to come before when used with ostickets.

Since ostickets comes as a package, it includes its own copy of PasswordHash.php, thus required_once doesn't prevent the class from being declared twice. I would rather not modify the osticket package using something like if(!class_exists('PasswordHash')){require_once(INCLUDE_DIR.'PasswordHash.php');} as this will cause problems if I upgrade ostickets and forget to make the changes.

I would also rather not modify the first file which includes the PasswordHash class by changing the class name again to allow future upgrades without problems.

My options as I see them...

  1. Modify one of the 3rd party libraries even though I would rather not.
  2. Somehow declare the class when I first use it, and somehow "destroy it" and then go on with my business with ostickets. I don't think this is possible, but am not sure.
  3. Create a namespace when I first use PasswordHash. Is this a viable option, and if so, how?
  4. Maybe something else which I have not thought of?

Thanks

  • 写回答

1条回答 默认 最新

  • dsz90288 2014-02-23 12:29
    关注

    This is indeed what namespaces are for:

    <?php
    
      namespace NiceNamespaceName;
    
      class PasswordHash
      {
      }
    
    ?>
    

    Then you can use it as such:

    <?php
      $hash = new \NiceNamespaceName\PasswordHash();
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况