我正在使用第三方Ostickets应用程序。 include / class.passwd.php的第17行包含代码require_once(INCLUDE_DIR.'PasswordHash.php');,该代码使用class PasswordHash {...}创建对象。

我的问题是,我在脚本中较早使用Ordset来独立使用第三方类PashwordHash,并且在与Ostickets一起使用之前,我第一次使用PasswordHash是必需的。

由于ostickets是作为一个软件包提供的,因此它包含自己的PasswordHash.php副本,因此required_once不会阻止对该类进行两次声明。我宁愿不使用if(!class_exists('PasswordHash')){require_once(INCLUDE_DIR.'PasswordHash.php');}之类的方法修改osticket软件包,因为如果我升级ostickets并忘记进行更改,这将导致问题。

我也不想通过再次更改类名来修改包含PasswordHash类的第一个文件,以允许将来进行升级而不会出现问题。

我看到的我的选择...


修改第3方库之一,即使我不想这样做。
第一次使用该类时以某种方式声明该类,然后以某种方式“销毁”该类,然后继续使用Ostickets进行业务。我认为这是不可能的,但不确定。
首次使用PasswordHash时创建一个名称空间。这是可行的选择吗?
也许我没有想到的其他事情?


谢谢

最佳答案

这确实是名称空间的用途:

<?php

  namespace NiceNamespaceName;

  class PasswordHash
  {
  }

?>


然后,您可以像这样使用它:

<?php
  $hash = new \NiceNamespaceName\PasswordHash();
?>

10-05 19:12