我正在使用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
非常感谢!
答案 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
方法。