Bagaimana untuk mengelakkan amaran: apabila menandakan call_user_func dengan betul dalam PhpStorm/Lumen, pastikan untuk membuang pengecualian dalam blok 'cuba' yang sepadan?
<p>Saya mempunyai perisian tengah pengesahan dalam aplikasi Lumen saya seperti ini: </p>
<pre class="brush:php;toolbar:false;">class Authenticate
{
pemegang fungsi awam(Permintaan $permintaan, Penutupan $seterusnya, rentetan|null $guard = null): bercampur
{
cuba {
/**@var IlluminateAuthRequestGuard $requestGuard*/
$requestGuard = $ini->auth->guard($guard);
$signedIn = $requestGuard->check();
// ...
} tangkapan (NoUserIdProvidedException) {
// ...
}
// ...
}
}</pre>
<p>Ia berfungsi dengan baik, tetapi PhpStorm melaporkan bahawa pengecualian (saya mengalih keluar kebanyakan daripadanya daripada contoh, terdapat beberapa) tidak dibuang oleh blok yang mengandungi, walaupun begitu. </p>
<p>Nampaknya jauh di dalam RequestGuard ia menggunakan call_user_func</p>
<pre class="brush:php;toolbar:false;">return $this->user = call_user_func(
$this->callback, $this->request, $this->getProvider()
);</pra>
<p>Panggil set penutupan dalam AuthServiceProvider, yang menggunakan kaedah middleware pada kelas Keselamatan tersuai: </p>
<pre class="brush:php;toolbar:false;">class AuthServiceProvider memanjangkan ServiceProvider
{
but fungsi awam(): void
{
$this->app['auth']->viaRequest('api', function ($request) {
$security = new Security();
pulangkan $security->middleware($request);
});
}
}</pre>
<p>Pada pendapat saya, blok dokumentasi untuk middleware adalah betul</p>
<pre class="brush:php;toolbar:false;">/*** @param Minta $permintaan
* @return bool|objek|null
* @throws InvalidDomainUser
* @throws NoDomainUserException
* @membuang NoTokenOnRecordException
* @membuang NoTokenProvidedException
* @membuang NoUserException
* @membuang NoUserIdProvidedException*/
perisian tengah fungsi awam(Permintaan $permintaan): objek|bool|null
{</pre>
<p>Tambah blok dokumen, contohnya: </p>
<pre class="brush:php;toolbar:false;">/*** @membuang NoUserIdProvidedException*/</pre>
<p>Dalam penutupan, pembekal pengesahan atau kod pengendalian tidak menghilangkan amaran, adakah terdapat cara untuk mengulas atau menaip pembayang kod untuk mengelakkan positif palsu? Saya tidak mahu hanya mematikan pemeriksaan. </p>