0

也许我搜索错误,但我无法找到如何在字符串中指定对象类。例子:

我在数据库中保留一个 json 站点列表,执行一个 foreach 循环以从每个站点检索特定项目。但是,每个站点都有不同的结构。

SITE 1: $result->Food->Price->Today;
SITE 2: $result->Pizza->Slice->discount;

我试图将“$result->Pizza->Slice->discount”保留在一个变量中(在数据库中指定)并从类中返回它。

听起来很简单,但我是类对象的新手,我发现的只是如何从数组创建对象。

4

3 回答 3

1

将此值存储到您的数据库中:

serialize(['Pizza', 'Slice', 'discount']);

读取值时,将其反序列化:

unserialize($value_from_db);

要从 JSON 对象中检索值,请使用以下简单函数:

function retrieve_value($object, $trail) {

    foreach ($trail as $name)
        if (isset($object->$name))
            $object = $object->$name;
        else
            throw new Exception("Object does not have the property $name");

    return $object;
}

所以你有这样的事情:

$value = retrieve_value(json_decode($json), unserialize($db_value));

不要使用eval(),因为它是邪恶的。

于 2013-03-08T04:44:30.830 回答
0

一种肮脏的方法是进行 json 编码和解码。

$array = array([Your array]);
$obj = json_decode(json_encode($array));

虽然没有测试代码。

于 2013-03-08T04:32:39.717 回答
0

我想您可以将路径存储在数据库中,然后将“eval()”与对象上的路径一起使用。只要确保你知道没有人可以改变路径,因为 eval 对未经清理的代码很危险!

eval("\$value = \$result->{$pathvar};");

我没有测试,但类似的东西。当然 $pathvar 将是来自数据库的路径的值,无论存储在什么变量中。

于 2013-03-08T04:35:43.477 回答