抽象函数返回 NULL 而不是字符串 - PHP OOP
Abstract function returning NULL instead of a string - PHP OOP
我有这个 SessionService.php 文件可以处理 session_start
和 session_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);
}
我有这个 SessionService.php 文件可以处理 session_start
和 session_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);
public function createNewID() {
$new_session_id = session_create_id();
$_SESSION['new_session_id'] = $new_session_id;
return $this->returnNewSessionID($new_session_id);
}