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

Abstract function returning NULL instead of a string - PHP OOP

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

我使用抽象 class 生成新的会话 ID 并将其存储在名为 $new_session_id 的变量中。然后我将return这个变量作为一个名为returnNewSessionID()的抽象函数的参数,包含在classSessionRegenerateID中。这个抽象函数被设计成return变量$new_session_id.

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

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

正在生成 ID。问题很可能在于此变量 $new_session_id 在这些函数中的使用方式。我需要弄清楚为什么它没有被抽象函数return编辑。

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 class,它在逻辑上与这个相同,除了它 return 的值类型:TRUE 或 FALSE。有用。但是现在我正在传递一个带有字符串值的变量,它 returns NULL。感谢您帮助我理解原因。

感谢 Jeto,我通过在 $this->returnNewSessionID($new_session_id);

之前插入 'return' 解决了这个问题
        public function createNewID() {
            $new_session_id = session_create_id();
            $_SESSION['new_session_id'] = $new_session_id;
            return $this->returnNewSessionID($new_session_id);
        }