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

返回NULL而不是字符串的抽象函数-PHP OOP,php,function,class,oop,abstract-class,Php,Function,Class,Oop,Abstract Class,我有一个SessionService.php文件,它处理session\u start和session\u regenerate\u id函数 我使用一个抽象类生成一个新的会话ID,并将其存储在一个名为$new\u session\u ID的变量中。然后,我将此变量作为名为returnNewSessionID()的抽象函数的参数返回,该函数包含在类sessionRegeneratId中。此抽象函数用于返回变量$new\u session\u id 这就是问题所在它不返回字符串(我们生成的新会话I

我有一个SessionService.php文件,它处理
session\u start
session\u regenerate\u id
函数

我使用一个抽象类生成一个新的会话ID,并将其存储在一个名为
$new\u session\u ID
的变量中。然后,我将此变量作为名为
returnNewSessionID()
的抽象函数的参数返回,该函数包含在类
sessionRegeneratId
中。此抽象函数用于返回变量
$new\u session\u id

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

createNewID()
,您可以看到我正在将新生成的代码分配给一个名为
$\u session['new\u session\u id']
的会话变量。通过回显这个会话变量,我从中得到了期望值。同时,回显
createNewID()
函数返回的值会给我
NULL

正在生成ID。问题很可能在于这些函数中使用此变量的方式。我需要弄清楚为什么抽象函数不返回它

SessionService.php

接口会话重新生成接口{
公共函数createNewID();
(…其他不相关的功能…)
}
抽象类AbstractSessionRegenate实现SessionRegenerate接口{
公共函数createNewID(){
$new_session_id=session_create_id();
$\u SESSION['new\u SESSION\u id']=$new\u SESSION\u id;
$this->returnNewSessionID($new\u session\u id);
}
抽象保护函数returnNewSessionID($newID);
}
类SessionRegeneratId扩展了AbstractSessionRegenerate{
受保护的函数returnNewSessionID($newID){
返回$newID;
}
}
SessionController.php

$REGENASESSION=新会话REGENATEID;
$newID=$RegenerateSession->createNewID();
变量转储($newID);//输出为空
var_dump($_SESSION['new_SESSION_id']);//输出生成的会话ID

我有一个InputValidation类,它在逻辑上与这个类相同,只是它返回的值类型不同:TRUE或FALSE。它起作用了。但是现在我传递一个带有字符串值的变量,它返回NULL。感谢Jeto帮助我理解原因。

多亏了Jeto,我在
$this->returnNewsSessionID($new\u session\u id)之前插入了一个“return”来解决这个问题


AbstractSessionRegenate::createNewID
不返回任何内容。在
$this->returnNewSessionID($new\u session\u id)之前添加
return
应该有帮助:)谢谢。它起作用了。这么简单的一件事:)所以当我们返回的值是布尔值时,似乎不需要返回。正如我在问题的最后所说,我有另一个抽象类,它返回bool值,它不返回值,它是否是布尔值并不重要。如果不使用
return
,函数将不会返回任何内容(或者更准确地说,它将始终返回
null
)。我非常确定布尔值是在不使用
return
的情况下返回的。这就是我做输入验证的方式,我重复了这个来确认。甚至有一个例子,返回的值甚至不是布尔值:,所以也许我们都缺少一些东西…?@Doug如果你想让函数返回一些东西,你必须使用
return
关键字。否则,它将返回
NULL
:@Doug该示例中的
render()
函数不返回任何内容,它使用
echo
将某些内容写入输出。不一样。请注意,没有将该值检索到任何变量中。我在代码上再次运行var_dump(),没有“return”,并且输出为NULL。我发誓它确实返回了bool(true)或bool(false),之前使用了相同的代码。也许是opcache的重新验证频率太慢了。我真的很惊讶这次没用。谢谢你提供的信息,我编辑了答案。
        public function createNewID() {
            $new_session_id = session_create_id();
            $_SESSION['new_session_id'] = $new_session_id;
            return $this->returnNewSessionID($new_session_id);
        }