如何在PHP中获取重载对象中的变量名?
我在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
$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;
}
}
}