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

标签 php mongodb namespaces

背景(虽然我的问题可以概括):我想整合Mongo核心类 PhpRbac (基于角色的身份验证)添加额外的安全层以限制对特定数据库和集合的访问。例如如果代码尝试访问集合“dbname.foo.bar.baz”,它将检查是否存在 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 语句,而不是在调用它的位置:

use \MyUniqueNameSpace\MongoDB;

关于PHP:通过核心类/函数强制使用不同命名空间中的扩展类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24948066/

相关文章:

php - 访问多个复选框的值

php - Laravel 5 - 在返回资源的所有投票作为关系时检查用户是否有 'voted'

php - 基于 MySQL 和 PHP 的复选框选中状态

python - 如何在 Flask 中使用 MongoEngine 一次向 Mongodb 文档添加多个条目?

C# MVC5 View 无法识别命名空间

php - 以编程方式更改状态后的 Woocommerce 产品变体 "disappear"

node.js - 将 excel(.xlsx) 文件转换为 JSON

mongodb - 一次构建多个索引

xml - XSLT 后出现未使用的 namespace 声明

xslt - 如何使用 XSLT 为所有元素和属性添加命名空间和前缀?