변수 개수의 인수를 PHP 함수에 전달하는 방법
변수 개수의 인수를 사용하는 PHP 함수가 있습니다(사용:func_num_args()
그리고.func_get_args()
함수를 전달할 인수 수는 배열의 길이에 따라 달라집니다.변수 개수의 인수를 사용하여 PHP 함수를 호출하는 방법이 있습니까?
배열에 인수가 있는 경우 함수에 관심이 있을 수 있습니다.
전달할 인수의 수가 배열의 길이에 따라 달라지는 경우, 이는 아마도 어레이 자체에 해당 인수를 패킹할 수 있음을 의미합니다.이 인수는 어레이의 두 번째 파라미터에 사용됩니다.call_user_func_array
.
전달한 배열의 요소는 고유한 매개 변수로 함수에 의해 수신됩니다.
예를 들어, 다음과 같은 기능이 있는 경우:
function test() {
var_dump(func_num_args());
var_dump(func_get_args());
}
다음과 같이 파라미터를 배열로 정리할 수 있습니다.
$params = array(
10,
'glop',
'test',
);
그런 다음 함수를 호출합니다.
call_user_func_array('test', $params);
이 코드는 다음과 같이 출력됩니다.
int 3
array
0 => int 10
1 => string 'glop' (length=4)
2 => string 'test' (length=4)
즉, 함수의 i와 마찬가지로 3개의 파라미터가 다음과 같이 호출되었습니다.
test(10, 'glop', 'test');
이것은, PHP 5.6.x 로도 가능하게 되었습니다.연산자(일부 언어에서는 splat 연산자라고도 함):
예:
function addDateIntervalsToDateTime( DateTime $dt, DateInterval ...$intervals )
{
foreach ( $intervals as $interval ) {
$dt->add( $interval );
}
return $dt;
}
addDateIntervaslToDateTime( new DateTime, new DateInterval( 'P1D' ),
new DateInterval( 'P4D' ), new DateInterval( 'P10D' ) );
새로운 Php 5.6에서는... operator
사용하는 대신func_get_args()
.
이를 통해 전달한 모든 파라미터를 얻을 수 있습니다.
function manyVars(...$params) {
var_dump($params);
}
PHP 5.6 이후 변수 인수 목록은 다음과 같이 지정할 수 있습니다....
교환입니다.
function do_something($first, ...$all_the_others)
{
var_dump($first);
var_dump($all_the_others);
}
do_something('this goes in first', 2, 3, 4, 5);
#> string(18) "this goes in first"
#>
#> array(4) {
#> [0]=>
#> int(2)
#> [1]=>
#> int(3)
#> [2]=>
#> int(4)
#> [3]=>
#> int(5)
#> }
보다시피...
연산자는 배열 내의 변수 인수 목록을 수집합니다.
변수 인수를 다른 함수에 전달해야 하는 경우...
그래도 도와줄 수 있어
function do_something($first, ...$all_the_others)
{
do_something_else($first, ...$all_the_others);
// Which is translated to:
// do_something_else('this goes in first', 2, 3, 4, 5);
}
PHP 7 이후 변수 목록은 모두 동일한 유형이어야 합니다.
function do_something($first, int ...$all_the_others) { /**/ }
이 작업을 수행하는 방법을 찾고 계신 분들을 위해$object->method
:
call_user_func_array(array($object, 'method_name'), $array);
변수 매개 변수를 사용하여 변수 method_name을 호출하는 구성 함수로 성공했습니다.
그냥 그렇게 부르면 돼.
function test(){
print_r(func_get_args());
}
test("blah");
test("blah","blah");
출력:
어레이 ( [0] = > blah )어레이 ( [ 0 ] = > blah [ 1 ] = > blah )
여기 있는 누구도 단순히 어레이를 전달하고 추출하는 것에 대해 언급하지 않은 것이 놀랍습니다.예:
function add($arr){
extract($arr, EXTR_REFS);
return $one+$two;
}
$one = 1;
$two = 2;
echo add(compact('one', 'two')); // 3
물론 이것은 인수 검증을 제공하지 않습니다.그러기 위해서는, https://gist.github.com/iautomation/8063fc78e9508ed427d5의 제 기대 기능을 누구나 사용할 수 있습니다.
(PHP 8 이후) 변수 인수와 조합하여 명명된 인수를 사용할 수 있는 가능성에 대한 문서를 찾을 수 없었습니다.왜냐하면 이 코드를 사용해 봤는데 정말 효과가 있다는 사실에 놀랐거든요.
function myFunc(...$args) {
foreach ($args as $key => $arg) {
echo "Key: $key Arg: $arg <br>";
}
}
echo myFunc(arg1:"foo", arg2:"bar");
출력:
Key: arg1 Arg: foo
Key: arg2 Arg: bar
내 생각에 이건 꽤 멋진 것 같아.
다음은 마법 메서드 __invoke를 사용한 솔루션입니다.
(php 5.3 이후 이용 가능)
class Foo {
public function __invoke($method=null, $args=[]){
if($method){
return call_user_func_array([$this, $method], $args);
}
return false;
}
public function methodName($arg1, $arg2, $arg3){
}
}
같은 클래스 내부에서:
$this('methodName', ['arg1', 'arg2', 'arg3']);
오브젝트 인스턴스:
$obj = new Foo;
$obj('methodName', ['arg1', 'arg2', 'arg3'])
오래된 질문이지만, 여기 있는 어떤 대답도 단순히 질문에 대답하는 데 도움이 되지 않는다는 것을 알고 있습니다.
php를 가지고 놀았을 뿐인데, 솔루션은 다음과 같습니다.
function myFunction($requiredArgument, $optionalArgument = "default"){
echo $requiredArgument . $optionalArgument;
}
이 함수는 다음 두 가지 작업을 수행할 수 있습니다.
파라미터만 :myFunction("Hi")
default됩니다.하이 디폴트"입니다.
옵션 인 '', '보다', '보다', '보다'를.myFunction("Hi","me")
' '안녕하세요', '안녕하세요'라고 .
나는 이것이 앞으로 이것을 찾는 사람들에게 도움이 되기를 바란다.
언급URL : https://stackoverflow.com/questions/1422652/how-to-pass-variable-number-of-arguments-to-a-php-function
'programing' 카테고리의 다른 글
JDBC를 사용하여 추출 및 재삽입 시 SQL datetime(6)의 정밀도를 유지하는 방법 (0) | 2022.09.28 |
---|---|
요소의 내용이 오버플로우인지 확인하시겠습니까? (0) | 2022.09.24 |
PHP 스크립트에서 max_execution_time 가져오기 (0) | 2022.09.24 |
구조 선언 끝에 있는 이 [1]의 목적은 무엇입니까? (0) | 2022.09.24 |
Java Enumeration과 반복자의 차이점 (0) | 2022.09.24 |