Php 从字符串变量获取对象值
我在谷歌上搜索并阅读手册,但找不到答案 即,具有如下字符串数组:Php 从字符串变量获取对象值,php,Php,我在谷歌上搜索并阅读手册,但找不到答案 即,具有如下字符串数组: $a = ['book->name', 'book->id']; 现在我需要从shelf对象中获取这些值。通常我会问: $bookName = $shelf->book->name; $bookId = $shelf->book->id; 但是第二部分是一根弦,我怎么读呢 如果我尝试$shelf->{$a[0]}我会得到未定义的属性:stdClass::$book->name in… 解决这
$a = ['book->name', 'book->id'];
现在我需要从shelf
对象中获取这些值。通常我会问:
$bookName = $shelf->book->name;
$bookId = $shelf->book->id;
但是第二部分是一根弦,我怎么读呢
如果我尝试$shelf->{$a[0]}
我会得到未定义的属性:stdClass::$book->name in…
解决这个问题的方法是什么
PS:我知道我可以尝试eval,但我真的不想尝试。您可以通过拆分字符串来实现这一点:
$a = ['book->name', 'book->id'];
$parts = explode('->', $a[0]);
$bookName = $shelf->{$parts[0]}->{$parts[1]};
$parts = explode('->', $a[1]);
$bookId = $shelf->{$parts[0]}->{$parts[1]};
这假设您知道属性的嵌套深度。我可能会将其包装在一个函数中,以便能够处理未知数量的属性:
function getPropertyByString($object, $properties) {
$parts = explode('->', $properties);
$value = $object;
foreach ($parts as $part) {
if (!property_exists($value, $part)) {
throw new OutOfBoundsException('Object does not contain a property called "' . $part . '"');
}
$value = $value->$part;
}
return $value;
}
$bookName = getPropertyByString($shelf, $a[0]);
$bookId = getPropertyByString($shelf, $a[1]);
不,你不能这样做。另外,您的对象正在泄漏封装。您是否尝试过$shelf->$a[0]也许这会奏效谢谢,这是我在
eval
之后的第二个选择,我也这样做了。我想可能会有一条单行线。