“关键字”是什么;“可赎回”;用PHP做什么

“关键字”是什么;“可赎回”;用PHP做什么,php,type-hinting,callable,function-declaration,type-declaration,Php,Type Hinting,Callable,Function Declaration,Type Declaration,更确切地说,函数声明参数中使用了“callable”。就像下面这个 function post($pattern, callable $handler) { $this->routes['post'][$pattern] = $handler; return $this; } 这对我们有什么好处 我们为什么以及如何使用它 也许这对你来说是非常基本的,然而,我试着去寻找它,却没有得到答案。至少,我什么都不懂 希望得到一个傻瓜的答案。我是新来的编码。。。XD 编辑:这里有一个

更确切地说,函数声明参数中使用了“callable”。就像下面这个

function post($pattern, callable $handler) {
    $this->routes['post'][$pattern] = $handler;
    return $this;
}
这对我们有什么好处

我们为什么以及如何使用它

也许这对你来说是非常基本的,然而,我试着去寻找它,却没有得到答案。至少,我什么都不懂

希望得到一个傻瓜的答案。我是新来的编码。。。XD

编辑:这里有一个链接,指向我从中复制上述代码的地方:

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

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

// Type 1: Simple callback
call_user_func('my_callback_function');
有些情况下,您的函数是其他函数的模板,在这种情况下,您将参数用于可调用函数

有关更多信息:


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

例如,您可能希望调用一个函数,该函数接受一个名为
log
的回调函数,该函数将以您想要的自定义方式记录数据


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

这是一个类型提示,它告诉我们此函数接受参数
$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!

这是一个非常简单的示例,但我希望它能帮助您理解这个想法。

下面是使用a作为参数的示例

<?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));
下面的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));

Callable是一种数据类型

注意:通过使用内置的is_callable函数,将变量的处理程序作为其参数,始终可以检查变量是否属于“callable”类型

代码中的“callable”关键字用于“类型声明”,在PHP5中也称为“Type hint”。这用于指定函数或方法接受哪种类型的参数。这是通过简单地将“类型提示”或“类型声明”(即类型名称,如本例中的“callable”)放在参数名称之前来实现的

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

注意:另外,如果您想让函数要求>从特定类实例化的对象<作为其各自的参数,则可以使用类名

-

参考资料:

-

我不熟悉编码,请纠正我的错误:)

Callable
callable
是一种php数据类型。它只是指任何可以调用的东西,即函数类型。如果这个函数是一个闭包,那么静态/常规方法或其他方法都无关紧要,只要我们可以调用这个函数

例子:
callable
只是参数的一个类型提示-看看
callable
是什么。callable应该是“callable”,即使PHP不区分大小写,只是按照惯例。@boctulus感谢您的更正,我已经编辑了我的回答。我知道,callable是一个类型,它被用于类型声明。谢谢。
//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