Абстрактная функция, возвращающая NULL вместо строки - PHP OOP - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть этот файл SessionService.php, который обрабатывает функции session_start и session_regenerate_id.

Я использую абстрактный класс, который генерирует новый идентификатор сеанса и сохраняет его в переменной с именем $new_session_id,Затем я возвращаю эту переменную в качестве аргумента абстрактной функции с именем returnNewSessionID(), содержащейся в классе SessionRegenerateID.Эта абстрактная функция предназначена для возврата переменной $new_session_id.

Вот в чем проблема. Вместо возврата строки (сгенерированного нами нового идентификатора сеанса) возвращается NULL.

На createNewID() вы видите, что я назначаю новый сгенерированный код переменной сеанса с именем $_SESSION['new_session_id'].Повторяя эту переменную сеанса, я получаю ожидаемое значение от нее.В то же время, возвращая возвращенное значение из функции createNewID(), я получаю NULL.

Идентификатор генерируется.Скорее всего, проблема заключается в том, как эта переменная $new_session_id используется внутри этих функций.Мне нужно выяснить, почему он не возвращается абстрактной функцией.

SessionService.php

interface SessionRegenerateInterface {

        public function createNewID();
        (... other unrelated functions ...)

}

abstract class AbstractSessionRegenerate implements SessionRegenerateInterface {

        public function createNewID() {
            $new_session_id = session_create_id();
            $_SESSION['new_session_id'] = $new_session_id;
            $this->returnNewSessionID($new_session_id);
        }

        abstract protected function returnNewSessionID($newID);

}

class SessionRegenerateID extends AbstractSessionRegenerate {

        protected function returnNewSessionID($newID) {
            return $newID;
        }

}

SessionController.php

$RegenerateSession = new SessionRegenerateID;
$newID = $RegenerateSession->createNewID();
var_dump($newID);    // outputs NULL
var_dump($_SESSION['new_session_id']);    // outputs the generated session ID

У меня есть класс InputValidation, который логически идентичен этому, за исключением типа возвращаемого значения: TRUE или FALSE.Оно работает.Но теперь, когда я передаю переменную со строковым значением, она возвращает NULL.Я ценю помощь, чтобы понять, почему.

1 Ответ

0 голосов
/ 15 апреля 2019

Благодаря Jeto, я решил это, вставив 'return' перед $this->returnNewSessionID($new_session_id);

        public function createNewID() {
            $new_session_id = session_create_id();
            $_SESSION['new_session_id'] = $new_session_id;
            return $this->returnNewSessionID($new_session_id);
        }
...