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