Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中获取重载对象中的变量名?_Php_Mongodb_Object_Overloading_Document Oriented Db - Fatal编程技术网

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

如何在PHP中获取重载对象中的变量名?,php,mongodb,object,overloading,document-oriented-db,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); } $this->db->co

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

$obj->person->name->function();
为此,我使用了get和call函数。它们看起来像这样:

function __get($field){
    return $this;
}
function __get($field){
    $array[] = $field;
    return new object($array);
}
$this->db->core->accounts->update(<array>);
但是,我想知道person和name的变量名,因为这是可以更改的 无论何时我试着这样做:

function __get($field){
    return $this;
}
function __get($field){
    $array[] = $field;
    return new object($array);
}
$this->db->core->accounts->update(<array>);
它们被保存,但当我添加另一行时,它只是将其添加到数组中。事实并非如此 调用函数后进行清理。我试图在调用时清空数组,但是 没有帮助。我想用谷歌搜索这个,但到目前为止。。我运气不好

PHP中是否有用于此的本机函数?

--读太多了?到此为止,剩下的只是更多的解释--

但是_调用会发送数组并将您发送到另一个处理 函数是真实的

原因: 我有5个程序员已经习惯了mongoDB类,我们正在改变 从MongoDB到另一个DB的大型代码库。有了这个补丁,我们就可以改变了 一次完成整个代码库的数据库,而无需构建查询。我们只是 在functions类中执行查询。(调用_调用时访问)。然而,一个典型的 今天,DB查询的行如下所示:

$this->db->accounts->update(<array>);
$this->db->accounts->update();
此行连接到一个数据库,在该数据库中它连接到帐户。 然而,我们有一些“特殊”变量,比如$core。看起来是这样的:

function __get($field){
    return $this;
}
function __get($field){
    $array[] = $field;
    return new object($array);
}
$this->db->core->accounts->update(<array>);
$this->db->core->accounts->update();
该数据库未连接到同一个数据库

我们需要的是能够在对象内部构建一行对象,这是动态的。它需要找到这些名字叫什么,这样我们就可以把它们放在查询中。只有一行,不是所有的。它基本上是一个基于文档的基础设施,基于密钥的数据库,有很多黑客攻击-D


非常感谢

访问属性时,需要返回不同的对象

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
时,它将返回可以处理此重载属性的
\u调用方法的对象。

问题是,accounts也是动态的。因此,它也可以是
$this->db->google->accounts->update()
。我现在用
\u call
来做这个。那
账户
意味着什么?我想那是给桌子的是的,那是给桌子的。所以在函数中,我们需要知道什么是。如果它的
账户
,我们需要一个表示它是
账户
,如果它的
谷歌
我们需要一个表示它是
谷歌
的变量。而且通话时间可以是它想打多久就打多久。示例:
$this->db->where->where->dowhatever->when->function->says->hello()
。我们需要将
无论什么
何时
何时
何时
函数
基本上是向hello()函数传递
。唯一保持不变的变量是$this->db.Ok,因此您需要创建一个中间类,为其实现
\u call()
方法重载。我正在更新我的答案。是
TempObj
调用
DB
类,还是返回
TempObj
。最后,我的示例中的
hello()
函数应该具有该行中的所有名称。那怎么办?
class TempObj{
  public $table;

  public $db;

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