<?php
declare(strict_types = 1);
/**
* @template TReturn
* @param Closure(): TReturn $closure
* @param 'static'|class-string|object $newScope
* @return Closure(): TReturn
*/
function bind(Closure $closure, string|object $newScope = 'static'): Closure
{
/** @var ?Closure(): TReturn */
$boundClosure = $closure->bindTo(null, $newScope);
assert($boundClosure !== null, 'Failed to bind closure.');
return $boundClosure;
}
final class Vault
{
public function __construct(
private readonly string $secret,
) {
}
}
$vault = new Vault('https://disk.yandex.ru/i/OG-9MXrogsS05g');
$secretAccessor = bind(static fn (): string => $vault->secret, $vault);
$secret = $secretAccessor();
var_dump($secret);
- Output for 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.5 - 8.3.25, 8.4.1 - 8.4.12
- string(39) "https://disk.yandex.ru/i/OG-9MXrogsS05g"
- Output for 8.0.1 - 8.0.28
- Parse error: syntax error, unexpected identifier "string", expecting variable in /in/K1LUG on line 24
Process exited with code 255. - Output for 7.4.0 - 7.4.33
- Parse error: syntax error, unexpected '|', expecting variable (T_VARIABLE) in /in/K1LUG on line 11
Process exited with code 255.
preferences:
73.1 ms | 408 KiB | 5 Q