关键字 "callable" 在 PHP 中有什么作用
What does the keyword "callable" do in PHP
更准确地说,"callable" 用于函数声明参数。像下面这个。
function post($pattern, callable $handler) {
$this->routes['post'][$pattern] = $handler;
return $this;
}
它对我们有什么好处?
为什么以及如何使用它?
也许这对您来说很基础,但是,我已经尝试搜索它,但没有得到任何答案。至少,我听不懂。
希望得到一个傻瓜式的答案。我是编码新手... XD
编辑: 这是我从以下位置复制上述代码的 link:link
可调用(回调)函数是在另一个函数内部调用或用作另一个函数的参数的函数
// An example callback function
function my_callback_function() {
echo 'hello world!';
}
// Type 1: Simple callback
call_user_func('my_callback_function');
在某些情况下,您的函数是其他函数的模板,在这种情况下,您可以为可调用函数使用参数。
for more information:
http://php.net/manual/en/language.types.callable.php
callable
类型允许我们将回调函数传递给被调用的函数。也就是说,回调函数参数允许被调用的函数动态调用我们在callable
函数参数中指定的代码。 这很有用,因为它允许我们将要执行的动态代码传递给函数。
例如,您可能想要调用一个函数,而该函数接受一个名为 log
的回调函数,它将以您想要的自定义方式记录数据。
我希望这是有道理的。有关详细信息,请参阅 this link。
这是一个类型提示,告诉我们这个函数接受参数 $handler
作为一个函数,看这个例子来澄清事情:
function helloWorld()
{
echo 'Hello World!';
}
function handle(callable $fn)
{
$fn(); // We know the parameter is callable then we execute the function.
}
handle('helloWorld'); // Outputs: Hello World!
这是一个非常简单的例子,但我希望它能帮助你理解这个想法。
这是使用 callable 作为参数的示例。
下面的 wait_do_linebreak 函数将休眠给定时间,然后使用给定的拖尾参数调用函数,然后回显换行符。
...$params
将拖尾参数打包到一个名为 $params 的数组中。这里它被用来将参数代理到可调用对象中。
在示例的最后,您将看到一个将可调用对象作为参数的本机函数。
<?php
function wait_do_linebreak($time, callable $something, ...$params)
{
sleep($time);
call_user_func_array($something, $params);
echo "\n";
}
function earth_greeting() {
echo 'hello earth';
}
class Echo_Two
{
public function __invoke($baz, $bat)
{
echo $baz, " ", $bat;
}
}
class Eat_Static
{
static function another()
{
echo 'Another example.';
}
}
class Foo
{
public function more()
{
echo 'And here is another one.';
}
}
wait_do_linebreak(0, 'earth_greeting');
$my_echo = function($str) {
echo $str;
};
wait_do_linebreak(0, $my_echo, 'hello');
wait_do_linebreak(0, function() {
echo "I'm on top of the world.";
});
wait_do_linebreak(0, new Echo_Two, 'The', 'Earth');
wait_do_linebreak(0, ['Eat_Static', 'another']);
wait_do_linebreak(0, [new Foo, 'more']);
$array = [
'jim',
'bones',
'spock'
];
$word_contains_o = function (string $str) {
return strpos($str, 'o') !== false;
};
print_r(array_filter($array, $word_contains_o));
输出:
hello earth
hello
I'm on top of the world.
The Earth
Another example.
And here is another one.
Array
(
[1] => bones
[2] => spock
)
Callable 是一种数据类型。
注意:您始终可以使用内置的 is_callable 函数检查变量是否属于 "callable" 类型,将变量的处理程序作为其参数。
代码中看到的"callable"关键字,是用来做一个"Type declaration",也就是PHP中的"type hint" 5.这个用来指定是哪种类型您的函数或方法接受的参数或参数的数量。这是通过简单地将 "type hint" 或 "Type declaration"(即类型名称,如本例中的 "callable")放在参数名称之前来完成的。
每当您使用 "type hints" 或 "Type declarations" 进行函数声明时(即当您指定了哪些类型是 allowed/accepted 时),并且您正在调用它们并提供数据参数-指定为可接受的类型以外的类型,将生成错误。
注意:另外,如果您想让您的函数需要 > 从特定 class 实例化的对象 < 其各自的参数
,则可以使用 class 名称
-
参考文献:
-
我是编码新手,请纠正我的错误:)
可调用
callable
是 php 数据类型。它只是表示可以调用的任何东西,即函数类型。如果这个函数是一个闭包,static/regular 方法或其他什么都无所谓,只要我们可以调用该函数即可。
示例:
//php callable type
$callback = function() {
return "hello world!\n";
};
class MyClass {
static function myCallbackMethod() {
return "static method call \n";
}
public function cb()
{
return "method call \n";
}
public function __invoke() {
return "invoke \n";
}
}
$obj = new MyClass();
// Illustrative function
function soUseful (callable $callback) {
echo $callback();
}
soUseful($callback);
soUseful(array($obj, 'cb')); // syntax for making method callable
soUseful(array('MyClass', 'myCallbackMethod')); // syntax for making static method callable
soUseful($obj); // Object can be made callable via __invoke()
soUseful(fn() => "hi from closure \n"); // arrow fn
//Output
//hello world!
//method call
//static method call
//invoke
//hi from closure
更准确地说,"callable" 用于函数声明参数。像下面这个。
function post($pattern, callable $handler) {
$this->routes['post'][$pattern] = $handler;
return $this;
}
它对我们有什么好处?
为什么以及如何使用它?
也许这对您来说很基础,但是,我已经尝试搜索它,但没有得到任何答案。至少,我听不懂。
希望得到一个傻瓜式的答案。我是编码新手... XD
编辑: 这是我从以下位置复制上述代码的 link:link
可调用(回调)函数是在另一个函数内部调用或用作另一个函数的参数的函数
// An example callback function
function my_callback_function() {
echo 'hello world!';
}
// Type 1: Simple callback
call_user_func('my_callback_function');
在某些情况下,您的函数是其他函数的模板,在这种情况下,您可以为可调用函数使用参数。
for more information: http://php.net/manual/en/language.types.callable.php
callable
类型允许我们将回调函数传递给被调用的函数。也就是说,回调函数参数允许被调用的函数动态调用我们在callable
函数参数中指定的代码。 这很有用,因为它允许我们将要执行的动态代码传递给函数。
例如,您可能想要调用一个函数,而该函数接受一个名为 log
的回调函数,它将以您想要的自定义方式记录数据。
我希望这是有道理的。有关详细信息,请参阅 this link。
这是一个类型提示,告诉我们这个函数接受参数 $handler
作为一个函数,看这个例子来澄清事情:
function helloWorld()
{
echo 'Hello World!';
}
function handle(callable $fn)
{
$fn(); // We know the parameter is callable then we execute the function.
}
handle('helloWorld'); // Outputs: Hello World!
这是一个非常简单的例子,但我希望它能帮助你理解这个想法。
这是使用 callable 作为参数的示例。
下面的 wait_do_linebreak 函数将休眠给定时间,然后使用给定的拖尾参数调用函数,然后回显换行符。
...$params
将拖尾参数打包到一个名为 $params 的数组中。这里它被用来将参数代理到可调用对象中。
在示例的最后,您将看到一个将可调用对象作为参数的本机函数。
<?php
function wait_do_linebreak($time, callable $something, ...$params)
{
sleep($time);
call_user_func_array($something, $params);
echo "\n";
}
function earth_greeting() {
echo 'hello earth';
}
class Echo_Two
{
public function __invoke($baz, $bat)
{
echo $baz, " ", $bat;
}
}
class Eat_Static
{
static function another()
{
echo 'Another example.';
}
}
class Foo
{
public function more()
{
echo 'And here is another one.';
}
}
wait_do_linebreak(0, 'earth_greeting');
$my_echo = function($str) {
echo $str;
};
wait_do_linebreak(0, $my_echo, 'hello');
wait_do_linebreak(0, function() {
echo "I'm on top of the world.";
});
wait_do_linebreak(0, new Echo_Two, 'The', 'Earth');
wait_do_linebreak(0, ['Eat_Static', 'another']);
wait_do_linebreak(0, [new Foo, 'more']);
$array = [
'jim',
'bones',
'spock'
];
$word_contains_o = function (string $str) {
return strpos($str, 'o') !== false;
};
print_r(array_filter($array, $word_contains_o));
输出:
hello earth
hello
I'm on top of the world.
The Earth
Another example.
And here is another one.
Array
(
[1] => bones
[2] => spock
)
Callable 是一种数据类型。
注意:您始终可以使用内置的 is_callable 函数检查变量是否属于 "callable" 类型,将变量的处理程序作为其参数。
代码中看到的"callable"关键字,是用来做一个"Type declaration",也就是PHP中的"type hint" 5.这个用来指定是哪种类型您的函数或方法接受的参数或参数的数量。这是通过简单地将 "type hint" 或 "Type declaration"(即类型名称,如本例中的 "callable")放在参数名称之前来完成的。
每当您使用 "type hints" 或 "Type declarations" 进行函数声明时(即当您指定了哪些类型是 allowed/accepted 时),并且您正在调用它们并提供数据参数-指定为可接受的类型以外的类型,将生成错误。
注意:另外,如果您想让您的函数需要 > 从特定 class 实例化的对象 < 其各自的参数
,则可以使用 class 名称-
参考文献:
-
我是编码新手,请纠正我的错误:)
可调用
callable
是 php 数据类型。它只是表示可以调用的任何东西,即函数类型。如果这个函数是一个闭包,static/regular 方法或其他什么都无所谓,只要我们可以调用该函数即可。
示例:
//php callable type
$callback = function() {
return "hello world!\n";
};
class MyClass {
static function myCallbackMethod() {
return "static method call \n";
}
public function cb()
{
return "method call \n";
}
public function __invoke() {
return "invoke \n";
}
}
$obj = new MyClass();
// Illustrative function
function soUseful (callable $callback) {
echo $callback();
}
soUseful($callback);
soUseful(array($obj, 'cb')); // syntax for making method callable
soUseful(array('MyClass', 'myCallbackMethod')); // syntax for making static method callable
soUseful($obj); // Object can be made callable via __invoke()
soUseful(fn() => "hi from closure \n"); // arrow fn
//Output
//hello world!
//method call
//static method call
//invoke
//hi from closure