PHP 콜백 함수 시작
Callable
PHP 요소에서 함수로 호출할 수 있는 것을 리셋 또는callable라고 합니다.
참조: PHP: 콜백/callable-Manual
본 보도의 제목에서 보듯이 리셋 함수라고 불리는 경우도 있다(실제로PHP 매뉴얼에도 적혀 있다).
불필요한 혼란을 피하기 위해 본 보도는callable로 호칭을 통일하기로 결정했다.
Examples
나는 설명만으로는 이해할 수 없다고 생각하기 때문에callable의 예를 살펴보자.
예제 1
PHPfunction hello() {
echo 'こんにちは。';
}
echo is_callable('hello') . PHP_EOL;
call_user_func('hello');
result1
こんにちは。
다섯 번째 줄의 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입니다.
이때 문자열foo
을 call_user_func
에 전달하여 함수foo
를 호출할 수 있습니다.
예제 2
PHPfunction 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
PHPfunction sum($int1, $int2) {
return $int1 + $int2;
}
echo is_callable('sum') . PHP_EOL;
echo call_user_func_array('sum', [2, 5]);
result1
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
입니다.
이때 함수sum
는 2
와 5
의 합7
으로 되돌아오기 때문에 7
는 echo
에 의해 출력된다.
잡담
다음 코드는 이번 예의 일곱 번째 줄을 7
코드로 바꾸는 것이다.
PHPfunction sum($int1, $int2) {
return $int1 + $int2;
}
echo is_callable('sum') . PHP_EOL;
echo call_user_func('sum');
이 동작을 실행할 때 당연히 오류가 발생합니다. 이때 오류 정보는 다음과 같습니다.
resultPHP 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);
result1
こんにちは。
1~3행에서 변수sum
에 무명 함수를 대입한다.
무명 함수는callable입니다.
이것은 다섯 번째 줄의 명령hello
에 따라 출력된 것이다.
일반적인 사용자 정의 함수와 달리 무명 함수도 매개 변수로 전달할 수 있다.
PHP: 콜백/callable-Manual
7줄에서 변수1
값call_user_func
값을 전달하는 무명함수를 통해 무명함수 자체를 호출한다.
겸사겸사 말씀드리다
PHP$hello = function () {
echo 'こんにちは。';
};
var_dump($hello);
resultobject(Closure)#1 (0) {
}
무명 함수는 PHP로 준비된 hello
특수 클래스의 실례로 이루어진다.
Closure 클래스를 사용하여 무명 함수를 구현합니다.
PHP: 무명 함수 - Manual
예 5
PHPclass 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']);
result1
イチロー
1-10 행에서 클래스Closure
를 정의했습니다.이 클래스에서 Player
방법을 정의했다.
다음 12줄에서 getname
클래스의 실례를 만들고 변수Player
에 대입합니다.
이때 수조ichiro
는callable이다.
이 수조를 [$ichiro, 'getname']
매개 변수로 지정하면 변수 call_user_func
를 대입하는 ichiro
클래스 실례 Player
방법을 사용할 수 있습니다.
배열을 사용하여 객체의 인스턴스를 전달합니다.배열의 0 번째 요소에 대상을 지정하고 첫 번째 요소에 방법 이름을 지정합니다.
PHP: 콜백/callable-Manual getname
, 따라서 예상한 방법을 사용한 것을 알 수 있다.
예 6
PHPclass Car {
public static function honk() {
echo 'ビッビー';
}
}
echo is_callable(['Car', 'honk']) . PHP_EOL;
call_user_func(['Car', 'honk']);
result1
ビッビー
1-5행에서 イチロー
류를 정의했는데 그 중에서 Car
의 정적 방법을 정의했다.
이때 수조honk
는callable이다.
이 그룹을 ['Car', 'honk']
의 매개 변수로 지정하면 call_user_func
클래스의 정적 방법Car
을 호출할 수 있습니다.
정적 클래스 방법에 대해서는 대상의 실례가 필요 없다.0 번째 요소로서 객체가 아닌 클래스 이름을 지정합니다.
PHP: 콜백/callable-Manual
예 7
PHPclass Car {
public static function honk() {
echo 'ビッビー';
}
}
echo is_callable('Car::honk') . PHP_EOL;
call_user_func('Car::honk');
result1
ビッビー
클래스의 정의는 예시 6과 같습니다.
예시 6에서, 우리는 수조honk
가callable라고 확정했다.
이 예는 문자열 ['Car', 'honk']
도callable임을 나타낸다.
ClassName::methodName 형식으로 지정할 수도 있습니다.
PHP: 콜백/callable-Manual
클래스의 정적 방법을callable로 표시하는 방법은 두 가지가 있다.
끝내다
나는 캐럴의 예를 많이 보았다.
나는 이렇게 캐럴이 무엇인지 다소 이해가 깊어졌다고 생각한다.
또한 본 기사에서도 설명이 불충분한 부분이 많다고 생각합니다.
궁금한 점이 있으면 적절함PHP 매뉴얼 등을 참조하십시오.
끝까지 읽어줘서 고마워요.
Reference
이 문제에 관하여(PHP 콜백 함수 시작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/obcat/items/9e3e2d46cdd75b599fd1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
나는 설명만으로는 이해할 수 없다고 생각하기 때문에callable의 예를 살펴보자.
예제 1
PHP
function hello() {
echo 'こんにちは。';
}
echo is_callable('hello') . PHP_EOL;
call_user_func('hello');
result1
こんにちは。
다섯 번째 줄의 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입니다.이때 문자열
foo
을 call_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]);
result1
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
입니다.이때 함수
sum
는 2
와 5
의 합7
으로 되돌아오기 때문에 7
는 echo
에 의해 출력된다.잡담
다음 코드는 이번 예의 일곱 번째 줄을
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);
result1
こんにちは。
1~3행에서 변수sum
에 무명 함수를 대입한다.무명 함수는callable입니다.
이것은 다섯 번째 줄의 명령
hello
에 따라 출력된 것이다.일반적인 사용자 정의 함수와 달리 무명 함수도 매개 변수로 전달할 수 있다.
PHP: 콜백/callable-Manual
7줄에서 변수
1
값call_user_func
값을 전달하는 무명함수를 통해 무명함수 자체를 호출한다.겸사겸사 말씀드리다
PHP
$hello = function () {
echo 'こんにちは。';
};
var_dump($hello);
resultobject(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']);
result1
イチロー
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']);
result1
ビッビー
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');
result1
ビッビー
클래스의 정의는 예시 6과 같습니다.예시 6에서, 우리는 수조
honk
가callable라고 확정했다.이 예는 문자열
['Car', 'honk']
도callable임을 나타낸다.ClassName::methodName 형식으로 지정할 수도 있습니다.
PHP: 콜백/callable-Manual
클래스의 정적 방법을callable로 표시하는 방법은 두 가지가 있다.
끝내다
나는 캐럴의 예를 많이 보았다.
나는 이렇게 캐럴이 무엇인지 다소 이해가 깊어졌다고 생각한다.
또한 본 기사에서도 설명이 불충분한 부분이 많다고 생각합니다.
궁금한 점이 있으면 적절함PHP 매뉴얼 등을 참조하십시오.
끝까지 읽어줘서 고마워요.
Reference
이 문제에 관하여(PHP 콜백 함수 시작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/obcat/items/9e3e2d46cdd75b599fd1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(PHP 콜백 함수 시작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/obcat/items/9e3e2d46cdd75b599fd1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)