返回NULL而不是字符串的抽象函数-PHP OOP

时间:2019-04-14 21:59:03

标签: php function class oop abstract-class

我有一个可以处理session_startsession_regenerate_id函数的SessionService.php文件。

我利用一个抽象类来生成一个新的会话ID,并将其存储在名为$new_session_id的变量中。然后,我将此变量作为包含在类returnNewSessionID()中的称为SessionRegenerateID的抽象函数的参数返回。此抽象函数旨在返回变量$new_session_id

这就是问题所在。 它不返回字符串(我们生成的新会话ID),而是返回NULL。

createNewID(),您看到我正在将新生成的代码分配给名为$_SESSION['new_session_id']的会话变量。通过回显此会话变量,我从中获得了期望值。同时,从createNewID()函数返回的值得到了NULL

正在生成ID。问题很可能在于在这些函数中使用变量$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 :(得分:0)

感谢Jeto,我通过在$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);
        }