如何在PHP中的重载对象中获取变量名?

时间:2012-05-24 02:34:54

标签: php mongodb object overloading document-oriented-db

我正在使用PHP进行重载,我想做的是; 当我调用对象时,它看起来像这样。

$obj->person->name->function();

为此,我使用__get和__call函数。它们看起来像这样:

function __get($field){
    return $this;
}

但是,我想知道人和名的变量名,因为这可能会改变 每当。我试着这样做:

function __get($field){
    $array[] = $field;
    return new object($array);
}

它们被保存,但是当我添加另一行时,它只是将它添加到数组中。它不是 调用函数后清理。我试图在__call清空数组,但那 没有帮助。我想谷歌这个,但到目前为止......我运气不好。

PHP中是否有本机功能?

  

- 太多要读了?停在这里,休息只是更多的解释 -

然而,__ call发送数组并将您发送到另一个处理的类 功能是真实的。

原因: 我有5个程序员用于mongoDB类,我们正在改变 从MongoDB到另一个数据库的大型代码库。有了这个修复,我们就可以改变 整个代码库的数据库同时存在,而没有构建查询的麻烦。我们刚刚 在函数类中执行查询。 (调用__call时访问)。但是,一个典型的 数据库查询的行今天看起来像这样:

$this->db->accounts->update(<array>);

此行连接到一个数据库,在该数据库中连接到帐户。 但是,我们有一些“特殊”变量,比如$ core。它看起来像这样:

$this->db->core->accounts->update(<array>);

那个没有连接到同一个数据库。

我们需要的是能够在对象内构建一系列对象,即动态对象。它需要找到所谓的名称,所以我们可以将它们放在查询中。仅适用于一行,而不是全部。它基本上是基于密钥的数据库上的基于文档的基础结构,具有大量的黑客攻击。 :-D

非常感谢!

1 个答案:

答案 0 :(得分:0)

访问该属性时需要返回其他对象。

class TempObj{
  public $table;

  public $db;

  public function __call($name,$arguments){
    switch($name){
      case "update":
        $this->db->query("UPDATE ......");
      break;
    }
  }
}

DB班级

public function __get($name){
  $obj = new TempObj;
  $obj->table = $name;
  $obj->db =& $this;
  return $obj;
}

这样当你执行$this->db->accounts时,它会返回一个对象,该对象可以处理这个重载属性的__call方法。