如何测试 Callable 参数是否 return 带有反射的字符串?
How to test if Callable parameter will return a string with Reflection?
我有一个需要 Callable
参数的函数。我想确定这个可调用 returns 是一个字符串,如果不是,则应抛出异常。
我试着搜索这个,但没有成功。 PHP 反射 API 是否提供这样的功能?我不想 运行 这个方法,看看它是否真的 returns 一个字符串。
我需要的示例:
class MyClass
{
protected static $overrider = null;
public static function setOverrider(Callable $callback)
{
// Pseudo code start
if (!$callback returns string) {
throw new \Exception('Wasnt a string!');
}
// Pseudo code end
self::$overrider = $callback;
}
}
也许你需要这样的东西:
class MyClass
{
protected static $overrider = null;
public static function setOverrider(Callable $callback)
{
$reflection = new ReflectionFunction($callback);
if ('string' != $reflection->getReturnType()) {
throw new \Exception('Wasnt a string!');
}
self::$overrider = $callback;
}
}
因此,正如我之前在评论中提到的:您需要声明 returning 类型的可调用对象(即 PHP7+ feature)。必须的,不然不行
像这样:
function my_function(): string
{
return 'hello';
}
或者如果你更喜欢匿名函数,可以像这样 (Closure):
$my_callable = function(): string {
return 'hello';
}
就这么简单:
如果您不首先告诉解释器 return 所讨论的函数应该 return 什么,解释器就无法在不调用它的情况下知道函数的数据类型。
我有一个需要 Callable
参数的函数。我想确定这个可调用 returns 是一个字符串,如果不是,则应抛出异常。
我试着搜索这个,但没有成功。 PHP 反射 API 是否提供这样的功能?我不想 运行 这个方法,看看它是否真的 returns 一个字符串。
我需要的示例:
class MyClass
{
protected static $overrider = null;
public static function setOverrider(Callable $callback)
{
// Pseudo code start
if (!$callback returns string) {
throw new \Exception('Wasnt a string!');
}
// Pseudo code end
self::$overrider = $callback;
}
}
也许你需要这样的东西:
class MyClass
{
protected static $overrider = null;
public static function setOverrider(Callable $callback)
{
$reflection = new ReflectionFunction($callback);
if ('string' != $reflection->getReturnType()) {
throw new \Exception('Wasnt a string!');
}
self::$overrider = $callback;
}
}
因此,正如我之前在评论中提到的:您需要声明 returning 类型的可调用对象(即 PHP7+ feature)。必须的,不然不行
像这样:
function my_function(): string
{
return 'hello';
}
或者如果你更喜欢匿名函数,可以像这样 (Closure):
$my_callable = function(): string {
return 'hello';
}
就这么简单: 如果您不首先告诉解释器 return 所讨论的函数应该 return 什么,解释器就无法在不调用它的情况下知道函数的数据类型。