【发布时间】:2019-09-04 22:00:27
【问题描述】:
我有这个处理session_start 和session_regenerate_id 函数的SessionService.php 文件。
我使用了一个抽象类来生成一个新的会话 ID 并将它存储在一个名为 $new_session_id 的变量中。然后我将此变量作为名为@987654324@ 的抽象函数的参数返回,该函数包含在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。感谢您帮助理解原因。
【问题讨论】:
-
AbstractSessionRegenerate::createNewID不返回任何内容。在$this->returnNewSessionID($new_session_id);之前添加return应该会有所帮助:) -
谢谢。有用。这么简单的事情:) 所以当我们返回的值是布尔值时,似乎不需要返回。正如我在问题末尾所说,我有另一个返回布尔值的抽象类,它可以在没有返回的情况下工作
标签: php function class oop abstract-class