【发布时间】:2015-04-06 17:37:43
【问题描述】:
是否有可能创建一个 PHP 类,它可以使用魔术方法保存任何类型的数据,甚至是递归的?
我看到了这个:PHP - Indirect modification of overloaded property
但它不处理递归数据:
class ActiveRecord extends Creator {
}
$a = new ActiveRecord();
$a->_id = "123456789";
$a->persona_info = [
"name" => "Bob",
"surnames" => ["First", "Second", "Third"]
];
$a->history = [
"logins" => [
[
"date" => "1999",
"ip" => "1.2.3.4"
],
[
"date" => "1129",
"ip" => "1.2.3.4"
]
],
"purchases" => [
[
"date" => "1819",
"amount" => "1884"
],
[
"date" => "1459",
"amount" => "14"
]
]
];
var_dump($a->history->logins);
这给了我:
PHP Notice: Trying to get property of non-object in /tmp/x.php on line 90
PHP Stack trace:
PHP 1. {main}() /tmp/x.php:0
NULL
为了进一步调查,我发现 $a->history 是一个普通的 php 数组,而不是 Value 对象(甚至是 Creator 对象。
【问题讨论】:
-
你也应该发布
Creator类 -
@DarkBee 在我的问题的链接中。
-
不要认为大多数人倾向于点击。初看没看,反正你用的是
creator类的修改版? -
你需要返回另一个也有魔法方法的对象,而不是原始数组。
-
@Barmar 那应该在哪里?在
Value的__get方法中?
标签: php containers magic-methods