关键字“ callable”在PHP中有什么作用

时间:2019-01-13 06:44:15

标签: php type-hinting callable function-declaration type-declaration

更确切地说,在函数声明参数中使用的“可调用”。像下面的那个。

function post($pattern, callable $handler) {
    $this->routes['post'][$pattern] = $handler;
    return $this;
}

它如何使我们受益?

为什么以及如何使用它?

也许这对您来说是非常基本的,但是,我尝试搜索它,但是没有得到任何答案。至少我无法理解。

希望获得假人答案。我是编码的新手... XD

编辑:以下是指向我从上面的代码中复制上述代码的链接:link

6 个答案:

答案 0 :(得分:4)

通过callable类型,我们可以将回调函数传递给正在调用的函数。也就是说,回调函数参数允许被调用的函数动态调用我们在callable函数参数中指定的代码。 这很有用,因为它使我们可以将要执行的动态代码传递给函数。

例如,可能要调用一个函数,并且该函数接受名为log的回调函数,该回调函数将以所需的自定义方式记录数据。

我希望这是有道理的。有关详细信息,请参见this link

答案 1 :(得分:2)

这是一种类型提示,它告诉我们此函数接受参数List<Property>作为函数,请参见以下示例以澄清问题:

ngFor

这是一个非常简单的示例,但是我希望它可以帮助您理解这个主意。

答案 2 :(得分:1)

可调用(回调)函数是在另一个函数内部调用或用作另一个函数的参数的函数

// An example callback function
function my_callback_function() {
    echo 'hello world!';
}

// Type 1: Simple callback
call_user_func('my_callback_function');

在某些情况下,您的函数是其他函数的模板,在这种情况下,您将参数用于可调用函数。

  

有关更多信息:   http://php.net/manual/en/language.types.callable.php

答案 3 :(得分:1)

以下是使用{{3}}作为参数的示例用法。

下面的wait_do_linebreak函数将休眠一段给定的时间,然后调用具有给定尾部参数的函数,然后回显换行符。

...$params将拖尾参数打包到一个名为$ params的数组中。在这里,它用于将参数代理到可调用对象中。

在示例的最后,您将看到一个原生函数,该函数以callable作为参数。

<?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
)

答案 4 :(得分:0)

Callable是一种数据类型。

注意:您始终可以通过使用内置的is_callable函数(将变量的处理程序作为其参数)来检查变量是否为“可调用”类型。

在代码中看到的“ callable”关键字用于“类型声明”,在PHP 5中也称为“类型提示”。它用于指定函数或方法接受的参数或参数的类型。只需在参数名称之前放置“类型提示”或“类型声明”(即类型的名称,如本例中的“可调用”)即可完成此操作。

每当对函数声明使用“类型提示”或“类型声明”时(即,当您指定允许/接受哪些类型时),并且您在调用它们时给出的数据类型参数不是指定为可接受,则会生成错误。

注意:同样,如果您想使函数需要>从特定类实例化的对象<为其相应的参数,则可以使用类名

-

参考文献:

php manual > type-declaration

php manual > callable type

-

我是编码的新手,请更正我的错误:)

答案 5 :(得分:0)

可调用

*,!otherrepo 是一种 php 数据类型。它只是意味着可以调用的任何东西,即函数类型。如果这个函数是一个闭包,静态/常规方法或者其他什么都无所谓,只要我们能调用这个函数。

示例:

callable