1)Quando fizemos:
public function filter($in, $out, &$consumed, bool $closing)
{
while($bucket = stream_bucket_make_writeable($in))
{
$linhas = explode("\n", $bucket->data);
}
}
Se o arquivo vier com strings tudo numa linha só, como o filtro ia entender onde ele tem que colocar a quebra de linha?
2) Quando fizemos:
public function onCreate()
{
$this->stream = fopen('php://temp', 'w+');
return $this->stream !== false;
}
Na linha do return, o que foi feito ali é como se fosse um if? Algo como "Se stream for diferente de false retorne stream?"
3) Na função:
public function filter($in, $out, int &$consumed, bool $closing)
{
$saida = '';
while($bucket = stream_bucket_make_writeable($in))
{
$linhas = explode("\n", $bucket->data);
foreach ($linhas as $linha) {
if(stripos($linha, 'parte') !== false)
{
$saida .= "$linha\n";
}
}
}
$bucketSaida = stream_bucket_new($this->stream, $saida);
stream_bucket_append($out, $bucketSaida);
return PSFS_PASS_ON;
}
Estou tendo o seguinte erro:
Method 'MeuFiltro::filter()' is not compatible with method 'php_user_filter::filter()'
Já pesquisei e não entendo porque. Já tentei colocar o retorno como int mas nada resolve.
4) Na linha:
stream_filter_register('alura.partes', MeuFiltro::class);
O que significa esses :: que ainda não entendi