PHP 콜백 함수 시작

14602 단어 답조PHP리셋 함수

Callable


PHP 요소에서 함수로 호출할 수 있는 것을 리셋 또는callable라고 합니다.
참조: PHP: 콜백/callable-Manual
본 보도의 제목에서 보듯이 리셋 함수라고 불리는 경우도 있다(실제로PHP 매뉴얼에도 적혀 있다).
불필요한 혼란을 피하기 위해 본 보도는callable로 호칭을 통일하기로 결정했다.

Examples


나는 설명만으로는 이해할 수 없다고 생각하기 때문에callable의 예를 살펴보자.

예제 1


PHP
function hello() {
    echo 'こんにちは。';
}

echo is_callable('hello') . PHP_EOL;

call_user_func('hello');
result
1
こんにちは。
다섯 번째 줄의 is_callable 은 함수입니다. 파라미터가callable인지 확인하는 데 도움을 줄 수 있습니다.is_callable - 매개 변수가 호출 가능한 함수 구조인지 확인
PHP: is_callable - Manual
매개 변수가callable이면 true, 그렇지 않으면 false 되돌아옵니다.
그 밖에 echo true 출력1, echo false 어떠한 내용도 출력하지 않습니다.
위의 예에서 1를 출력했기 때문에 is_callble의 매개 변수 문자열hello은callable이다.
callable는 문자열 hello 을 함수로 호출할 수 있음을 의미합니다.
실제로 7줄에서 call_user_func라는 함수를 사용하여callable 문자열hello을 함수로 호출합니다.call_user_func - 첫 번째 매개변수에 지정된 콜백 함수 호출
PHP: call_user_func - Manual こんにちは。로 출력되기 때문에 1~3행에 정의된 함수hello를 호출한 것을 알 수 있습니다.
일반적으로 함수foo를 정의할 때 문자열foo은callable입니다.
이때 문자열foocall_user_func에 전달하여 함수foo를 호출할 수 있습니다.

예제 2


PHP
function hello() {
    echo 'こんにちは。';
}

echo is_callable(hello) . PHP_EOL;

call_user_func(hello);
PHP Warning:  Use of undefined constant hello - assumed 'hello' (this will throw an Error in a future version of PHP) in ...
PHP Warning:  Use of undefined constant hello - assumed 'hello' (this will throw an Error in a future version of PHP) in ...
이번에 착오가 생겼다.
잘못된 정보를 자세히 읽으면 Use of undefined constant hello - assumed 'hello' 보일 것이다.
이것은 "정의되지 않은 상수 hello 를 사용한 것 같습니다. 문자열 hello 이 아닙니까?"뜻.
예제 1의 다섯 번째 줄과 일곱 번째 줄에서 두 개의 인용부호hello로 묶음''을 통해 문자열임을 나타낸다.
이번 예에서는 인용부호로 묶지 않았기 때문에 hello 상수로 해석된다.
이때 PHP는 상수hello의 값을 함수에 전달합니다.
하지만 상수hello를 정의하지 않아 PHP가 당황해 잘못된 정보를 뱉고 숲(?)으로 돌아왔다.
PHP 함수는 그 이름을 문자열로 전달합니다.
PHP: 콜백/callable-Manual

예 3


PHP
function sum($int1, $int2) {
    return $int1 + $int2;
}

echo is_callable('sum') . PHP_EOL;

echo call_user_func_array('sum', [2, 5]);
result
1
7
1-3행에 정의된 함수sum는 두 개의 숫자를 받아들여 합을 되돌려줍니다.
이 작업을 수행하려면 sum(2, 5) 와 같은 두 개의 매개변수를 지정해야 합니다.
이런 상황에서도 문자열sum 자체는callable이다.
이것은 다섯 번째 줄의 명령1에 따라 출력된 것이다.
그러면 문자열sum은callable입니다. 즉, 문자열sum을 함수로 호출할 수 있습니다.
callable에서 매개 변수 sum 와 같은 함수를 호출하려면 call_user_func_array 이 함수를 사용하십시오.call_user_func_array - 리셋 함수를 호출하는 매개 변수 그룹을 지정합니다.
PHP: call_user_func_array - Manual
첫 번째 매개 변수는callable를 지정하고, 두 번째 매개 변수는 호출할 함수의 그룹 공식을 지정합니다.
일곱 번째 줄에서 call_user_func_array의 첫 번째 매개 변수는callable 문자열sum을 지정했고, 두 번째 매개 변수는callable 문자열[2, 5]을 지정했다.
이것은 함수sum를 호출합니다. 함수sum의 첫 번째 매개 변수는 2, 두 번째 매개 변수는 5입니다.
이때 함수sum25의 합7으로 되돌아오기 때문에 7echo에 의해 출력된다.
잡담
다음 코드는 이번 예의 일곱 번째 줄을 7 코드로 바꾸는 것이다.
PHP
function sum($int1, $int2) {
    return $int1 + $int2;
}

echo is_callable('sum') . PHP_EOL;

echo call_user_func('sum');
이 동작을 실행할 때 당연히 오류가 발생합니다. 이때 오류 정보는 다음과 같습니다.
result
PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments to function sum(), 0 passed in ... and exactly 2 expected in ......
"함수echo call_user_func('sum');에 전달할 매개 변수가 너무 적다!"듣자니
즉, 호출 함수sum 자체에 문제가 없다는 것이다.
방금 보신 바와 같이 문자열sum 자체는callable입니다.
따라서 sum의 매개 변수에 문자열 call_user_func 을 지정하면 함수 sum 를 호출하는 것 자체에 문제가 없습니다.

예 4


PHP
$hello = function () {
  echo 'こんにちは。';  
};

echo is_callable($hello) . PHP_EOL;

call_user_func($hello);
result
1
こんにちは。
1~3행에서 변수sum에 무명 함수를 대입한다.
무명 함수는callable입니다.
이것은 다섯 번째 줄의 명령hello에 따라 출력된 것이다.
일반적인 사용자 정의 함수와 달리 무명 함수도 매개 변수로 전달할 수 있다.
PHP: 콜백/callable-Manual
7줄에서 변수1call_user_func값을 전달하는 무명함수를 통해 무명함수 자체를 호출한다.
겸사겸사 말씀드리다
PHP
$hello = function () {
  echo 'こんにちは。';  
};

var_dump($hello);
result
object(Closure)#1 (0) {
}
무명 함수는 PHP로 준비된 hello 특수 클래스의 실례로 이루어진다.
Closure 클래스를 사용하여 무명 함수를 구현합니다.
PHP: 무명 함수 - Manual

예 5


PHP
class Player {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function getname() {
        return $this->name;
    }
}

$ichiro = new Player('イチロー');

echo is_callable([$ichiro, 'getname']) . PHP_EOL;

echo call_user_func([$ichiro, 'getname']);
result
1
イチロー
1-10 행에서 클래스Closure를 정의했습니다.이 클래스에서 Player 방법을 정의했다.
다음 12줄에서 getname 클래스의 실례를 만들고 변수Player에 대입합니다.
이때 수조ichiro는callable이다.
이 수조를 [$ichiro, 'getname'] 매개 변수로 지정하면 변수 call_user_func 를 대입하는 ichiro 클래스 실례 Player 방법을 사용할 수 있습니다.
배열을 사용하여 객체의 인스턴스를 전달합니다.배열의 0 번째 요소에 대상을 지정하고 첫 번째 요소에 방법 이름을 지정합니다.
PHP: 콜백/callable-Manual getname, 따라서 예상한 방법을 사용한 것을 알 수 있다.

예 6


PHP
class Car {
    public static function honk() {
        echo 'ビッビー';
    }
}

echo is_callable(['Car', 'honk']) . PHP_EOL;

call_user_func(['Car', 'honk']);
result
1
ビッビー
1-5행에서 イチロー류를 정의했는데 그 중에서 Car의 정적 방법을 정의했다.
이때 수조honk는callable이다.
이 그룹을 ['Car', 'honk'] 의 매개 변수로 지정하면 call_user_func 클래스의 정적 방법Car을 호출할 수 있습니다.
정적 클래스 방법에 대해서는 대상의 실례가 필요 없다.0 번째 요소로서 객체가 아닌 클래스 이름을 지정합니다.
PHP: 콜백/callable-Manual

예 7


PHP
class Car {
    public static function honk() {
        echo 'ビッビー';
    }
}

echo is_callable('Car::honk') . PHP_EOL;

call_user_func('Car::honk');
result
1
ビッビー
클래스의 정의는 예시 6과 같습니다.
예시 6에서, 우리는 수조honk가callable라고 확정했다.
이 예는 문자열 ['Car', 'honk'] 도callable임을 나타낸다.
ClassName::methodName 형식으로 지정할 수도 있습니다.
PHP: 콜백/callable-Manual
클래스의 정적 방법을callable로 표시하는 방법은 두 가지가 있다.

끝내다


나는 캐럴의 예를 많이 보았다.
나는 이렇게 캐럴이 무엇인지 다소 이해가 깊어졌다고 생각한다.
또한 본 기사에서도 설명이 불충분한 부분이 많다고 생각합니다.
궁금한 점이 있으면 적절함PHP 매뉴얼 등을 참조하십시오.
끝까지 읽어줘서 고마워요.

좋은 웹페이지 즐겨찾기