PHP:强制核心类/函数在不同的命名空间中使用扩展类


PHP: forcing use of extended class in different namespace by core class / function

背景(尽管我的问题可以概括):我想将Mongo核心类与PhpRbac(基于角色的身份验证)集成,以添加额外的安全层,以限制对特定数据库和集合的访问。例如,如果代码试图访问集合"dbname.foo.bar。它将检查PhpRbac权限是否存在"/mongo/dbname/foo/bar/baz",并确保当前用户具有该权限。

我想强制核心MongoClient::selectDB()函数返回MongoDB的扩展版本,而不是像通常那样返回核心MongoDB

(1)定义MongoDB的扩展版本

namespace MyUniqueNamespace;
class MongoDB extends 'MongoDB {
  public function __construct(){
    die("We're definitely using the extended version!");
  }
  public function someStandardFunction(){
    authoriseOrThrowException();
    return parent::someStandardFunction();
  }
}

(2)强制核心MongoClient(不修改它)使用'MyUniqueNameSpace'MongoDB而不是MongoDB。使用useuse ... as MongoDB不能达到这个目的:(

use 'MyUniqueNameSpace'MongoDB;
$cl = new MongoClient();
$db = $cl->selectDB("dbname"); //would die if it was using the extended function

谁能提出一种实现这一目标的方法?PHP不能转换为一个不同的类,我不想开始重写Mongo类,因为这是我在将PhpRbac与其他功能集成时将面临的一个普遍问题。

谢谢你的帮助

您应该在您的MongoClient类中添加以下使用语句,而不是在调用它的地方:

use 'MyUniqueNameSpace'MongoDB;