我正在尝试阅读一些PHP代码,但无法理解如何使用变量$谓词:
private function getRelatedItems() {
$predicate = Zotero_Relations::$relatedItemPredicate;
$relations = $this->getRelations();
if (empty($relations->$predicate)) {
return [];
}
$relatedItemURIs = is_string($relations->$predicate)
? [$relations->$predicate]
: $relations->$predicate;
// Pull out object values from related-item relations, turn into items, and pull out keys
$keys = [];
foreach ($relatedItemURIs as $relatedItemURI) {
$item = Zotero_URI::getURIItem($relatedItemURI);
if ($item) {
$keys[] = $item->key;
}
}
return $keys;
}
据我所知,$ predicate被分配了一个从未使用过的值。但我想我不知何故误解了范围,或者?
答案 0 :(得分:3)
$predicate
变量保存$relations
对象上的属性名称。 E.g:
$relations->$predicate
如果$predicate
设置为foo
,则PHP会将该行视为:
$relations->foo
答案 1 :(得分:1)
该变量用于访问$relations
变量中的属性。
以下是变量属性访问的简化用法示例,该示例应说明您的用法:
$property = 'firstName';
$data = (object) array(
'firstName' => 'Justin',
'lastName' => 'Case',
);
echo $data->$property; //Rquivalent to $data->firstName, which eEchoes 'Justin'
此外,它也适用于函数和类方法:
class Foo
{
public function bar()
{
echo 'Hello, world!';
}
}
$foo = new Foo();
$method = 'bar';
$foo->$method(); //Equivalent to $foo->bar(); Displays 'Hello, world!'
$function = 'strlen';
echo $function('Hello, world!'); //Is equivalent to calling strlen('Hello, world!');
它非常整洁!