Php Laravel中的自定义函数返回NULL,但var_dump中的自定义函数不为NULL
我在Laravel5.4应用程序中有一个自定义类,它应该返回哈希秘密。这个班是Php Laravel中的自定义函数返回NULL,但var_dump中的自定义函数不为NULL,php,laravel,laravel-5,Php,Laravel,Laravel 5,我在Laravel5.4应用程序中有一个自定义类,它应该返回哈希秘密。这个班是 class Hash { // Unencrypted secret private $secret; public function generateSecret(){ $secret = generateSecretKey(); $secret_hash = password_hash($secret, PASSWORD_BCRYPT); S
class Hash {
// Unencrypted secret
private $secret;
public function generateSecret(){
$secret = generateSecretKey();
$secret_hash = password_hash($secret, PASSWORD_BCRYPT);
Session::put('secret-hash', $secret_hash);
$this->secret = $secret;
}
}
那么在我的控制器里我有
use Hash;
class UsersController extends BaseController
{
public function Auth()
{
$myhash = new Hash();
$msg = '';
$myhash->generateSecret();
$enc = $myhash->encryptSecret($key->key);
return View::make('users.auth', ['enc'=> $enc]);
}
...
}
var_dump$myhash->generateScret;从控制器返回NULL
var_dump$secret位于公共函数generateScret返回字符串15 866094233422231字符串15 583375207466239中,这是正确的
var_dump$myhash;在UsersController中,还返回正确的数据
String(15) "008844975703088" object(Hash)#329 (1)
{
["secret":"Hash":private]=> string(15) "008844975703088"
}
似乎问题出在控制器中,正在生成哈希$myhash->generateScret;。函数必须生成secreta字符串,然后对其进行哈希处理$enc=$myhash->encryptSecret$key->key;并显示在页面上
你知道为什么这个功能不起作用吗?我不知道还能尝试什么。此功能:
public function generateSecret()
{
$secret = generateSecretKey();
$secret_hash = password_hash($secret, PASSWORD_BCRYPT);
Session::put('secret-hash', $secret_hash);
$this->secret = $secret;
}
不返回任何数据,因此var_dump$myhash->generateScret;将始终为空
如果需要在类外访问状态,则应使用getter公开状态。generateScret不返回任何内容,因此$myhash->generateScret为NULL。GenerateCret确实将$secret设置为属性$this->secret=$secret,但由于$secret被声明为private,您无法在类外访问它,因此控制器中的$myhash->secret将无法工作
因此,您有两个选项—要么返回secret以便调用代码可以看到它,要么添加getter以使$secret在类外可访问。以下是您可以退回的方式:
public function generateSecret(){
$secret = generateSecretKey();
$secret_hash = password_hash($secret, PASSWORD_BCRYPT);
Session::put('secret-hash', $secret_hash);
return $secret;
}
然后在控制器中:
$secret = $myhash->generateSecret();
我认为var_dump显示null是因为你的函数没有返回。是的,我也这么认为,但是当我直接在函数中var dump它时,它显示的是结果,它不是null,这对我来说很奇怪。返回你的函数generateScret的值。@aldrin27,这是GenerateCret的返回示例-string15 866094233422231 string15 583375207466239我不明白,因为这个函数在laravel 4.2中工作得非常好。对不起,我的用户控制器中没有getter,我有$myhash=新Hash;不,那只是实例化你的类。添加一个返回$this->secret的getter,或者只返回$secret;来自GenerateCret@Don'tPanic,返回$secret;不会改变任何事情。也许我错了,但我只是替换了$this->secret=$secret;返回$secret;,对吗?我添加了一个更详细的答案。谢谢你的回答,很抱歉耽搁了。我将尝试这种方式,并让你知道结果。只是一个问题:什么原因可以在我的本地服务器上工作,但不在线?抱歉,但仍然是boolfalse。我的意思是,我不再在控制器中获取NULL,但现在我获取boolfals我不确定您的代码现在是什么样子,但是$secret是否仍然来自GenerateCretKey?如果是,则GenerateCretKey返回false。。。请再次尝试var_dump以确认。谢谢您的帮助。第二次是我的错误。一切正常!