Что делает ключевое слово callable в PHP - PullRequest
0 голосов
/ 13 января 2019

Точнее, «вызываемый» используется в аргументах объявления функции. как показано ниже.

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

Как это нам выгодно?

почему и как мы это используем?

Возможно, это очень просто для вас, однако я попытался найти его и не получил ответов. по крайней мере, я ничего не мог понять.

Надеясь на ответ для чайников. Я новичок в кодировании ... XD

Редактировать: Вот ссылка, куда я скопировал указанный фрагмент кода: ссылка

Ответы [ 5 ]

0 голосов
/ 14 января 2019

Callable - это тип данных.

примечание: вы всегда можете проверить, являются ли ваши переменные типа «вызываемыми», используя встроенную функцию is_callable, предоставляя обработчик вашей переменной в качестве аргумента.

Ключевое слово «callable», видимое в коде, используется для «объявления типа», также известного как «подсказка типа» в PHP 5. оно используется для указания типа аргумента или параметра, которые принимают ваши функции или методы. это можно сделать, просто поместив «подсказку типа» или «объявление типа» (то есть имя типа, как в данном случае «вызываемый») перед именами параметров.

Всякий раз, когда вы используете "подсказки типов" или "объявления типов" для объявлений функций (т.е. когда вы указали, какие типы разрешены / приняты), и вы вызываете их, давая параметры типов данных, отличных от указанных как допустимо, генерируется ошибка.

примечание: также, имена классов могут использоваться, если вы хотите, чтобы ваша функция требовала> объекта, созданного из определенного класса <для соответствующего параметра </p>

-

Ссылки:

php manual> объявление типа

php manual> вызываемый тип

-

Я новичок в кодировании, поэтому, пожалуйста, исправьте мои ошибки:)

0 голосов
/ 13 января 2019

Вот пример использования вызываемого в качестве параметра.

Функция 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
)
0 голосов
/ 13 января 2019

Тип callable позволяет передавать функцию обратного вызова вызываемой функции. То есть параметры функции обратного вызова позволяют вызываемой функции динамически вызывать код, который мы указываем в параметре функции callable. Это полезно, поскольку позволяет передавать динамический код для выполнения функции.

Например, кто-то может захотеть вызвать функцию, и функция принимает функцию обратного вызова с именем log, которая будет регистрировать данные произвольным способом.

Надеюсь, это имеет смысл. Подробнее см. по этой ссылке .

0 голосов
/ 13 января 2019

Это подсказка типа, которая говорит нам, что эта функция принимает параметр $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!

Это очень простой пример, но я надеюсь, что он поможет вам понять идею.

0 голосов
/ 13 января 2019

Функция вызова (обратного вызова) - это функция, которая вызывается внутри другой функции или используется в качестве параметра другой функции

// 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

...