Php Laravel中的自定义函数返回NULL,但var_dump中的自定义函数不为NULL

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

我在Laravel5.4应用程序中有一个自定义类,它应该返回哈希秘密。这个班是

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以确认。谢谢您的帮助。第二次是我的错误。一切正常!