PHP использует переменную $ _SESSION по умолчанию в функции класса - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть класс, который много взаимодействует с переменными $_SESSION.Некоторые функции должны по умолчанию для текущего пользователя, если ни одна не указана.У меня есть идентификатор пользователя в $_SESSION['userid'] и я использую его в некоторых местах нормально.Однако, когда я пытаюсь использовать переменную $_SESSION в качестве значения по умолчанию для параметров функции, я получаю сообщение об ошибке.Каков наилучший способ сделать это?

Вот ошибка, которую я получаю:

Fatal error: Constant expression contains invalid operations in main.php on line whatever

<?php
class User {

    public function log_out() {
        unset($_SESSION['userid']);
    }

    public function get_data($uid = $_SESSION['userid']) {

    }

    public function logged_in() {
        return isset($_SESSION['userid']);
    }

    public function enabled($uid = $_SESSION['userid']) {

    }

}
?>

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Выражение константы / Вызов функции в качестве значения параметра по умолчанию в PHP не допускается.

Вы можете попробовать $uid = null;

Внутри функции,

$uid = $uid ?: $_SESSION['user_id'];

(?: это оператор Элвиса, он проверяет пустое значение и заменяет присвоенное значение, PHP5.3 +)

Однако, поскольку вы можете сделать это несколько раз, вы можете рассмотретьсоздайте переменную класса и инициализируйте значение в конструкторе.

private $uid;

public __constructor($uid = null) { $this->uid = uid ?: $_SESSION['user_id']; }

0 голосов
/ 22 февраля 2019

Нельзя использовать переменную в сигнатуре метода.Вы можете по умолчанию $ uid param равным нулю.Затем в теле функции используйте значение из сеанса, если $ uid равно нулю.

Пример

Вы не можете сделать это:

public function get_data($uid = $_SESSION['userid']) {

}

Но,это нормально:

public function get_data($uid = null) {
    $uid = $uid ?? $_SESSION['userid'];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...