PHP变量范围 - 是在任何地方使用的变量吗?

时间:2014-03-21 04:15:52

标签: php scope

我正在尝试阅读一些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被分配了一个从未使用过的值。但我想我不知何故误解了范围,或者?

2 个答案:

答案 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!');

它非常整洁!