Laravel中的自定义函数返回NULL但在var_dump上不是NULL

时间:2017-07-31 07:33:18

标签: php laravel laravel-5

我在laravel 5.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->generateSecret());返回NULL

var_dump($secret)中的{p> public function generateSecret()返回string(15) "866094233422231" string(15) "583375207466239"这是正确的。

UsersController中的

var_dump($myhash);也返回正确的数据

String(15) "008844975703088" object(Hash)#329 (1) 
{ 
     ["secret":"Hash":private]=> string(15) "008844975703088" 
}

出现问题出在控制器中并生成哈希$myhash->generateSecret();。该函数必须生成secret(一个字符串),然后进行散列$enc = $myhash->encryptSecret($key->key);并显示在页面上。

为什么功能不起作用的任何想法?我不知道还能尝试什么。

2 个答案:

答案 0 :(得分:1)

generateSecret()不会返回任何内容,因此$myhash->generateSecret()NULLgenerateSecret() $secret设置为属性($this->secret = $secret),但由于$secret被声明为私有,因此您无法在{类,因此控制器中的$myhash->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();

答案 1 :(得分:0)

此功能:

public function generateSecret()
{

   $secret = generateSecretKey();

   $secret_hash = password_hash($secret, PASSWORD_BCRYPT);

   Session::put('secret-hash', $secret_hash);
   $this->secret = $secret;        
}

不返回任何数据,因此var_dump($myhash->generateSecret());将始终为空。

如果需要在课外访问,则应使用getter公开状态。