Понимание ИЛИ в переменной PHP - PullRequest
1 голос
/ 24 октября 2019

Я использовал этот пакет brain/nonces для одноразовой проверки в WordPress, но, копаясь в коде, я нашел эту строку $context or $context = new RequestGlobalsContext();, и я не могу понять, что это значит. Было бы полезно, если бы кто-то мог объяснить больше об этом.

Вот полный код,

 public function validate(NonceContextInterface $context = null)
    {
        $context or $context = new RequestGlobalsContext();

        $value = $context->offsetExists($this->action) ? $context[$this->action] : '';
        if (!$value || !is_string($value)) {
            return false;
        }

        $lifeFilter = $this->lifeFilter();

        add_filter('nonce_life', $lifeFilter);
        $valid = wp_verify_nonce($value, $this->hashedAction());
        remove_filter('nonce_life', $lifeFilter);

        return (bool)$valid;
    }

Ответы [ 2 ]

3 голосов
/ 24 октября 2019

Это просто означает, что если $context имеет значение, которое можно интерпретировать как true, то эта часть после or не будет выполнена. В данном конкретном случае, я думаю, это просто быстрый способ поместить значение по умолчанию в $context, в случае, если функция была вызвана без указания ее.

0 голосов
/ 24 октября 2019

PHP не оценивает 2 подвыражения ИЛИ, если первое подвыражение истинно. Этот

$context or $context = new RequestGlobalsContext();

может быть записан для лучшего понимания как

if (! $context) $context = new RequestGlobalsContext();

Разница в скорости между двумя вариантами практически не имеет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...