developer tip

PHP에서 세 점 (…)의 의미

copycodes 2020. 9. 24. 07:57
반응형

PHP에서 세 점 (…)의 의미


PHP에서 세 점 (...)의 의미는 무엇입니까?

서버에 Magento 2를 설치하는 동안 오류가 발생했습니다. 코드를 조사하고 오류를 생성하는 점 3 개 (...)가 있음을 발견했습니다. 아래 코드를 언급했습니다

return new $type(...array_values($args));

...$str불리며 PHP에서 플랫 연산자 .

이 기능을 사용하면 원하는 경우 전달 된 "일반"인수와 결합하여 함수에 대한 가변 개수의 인수를 캡처 할 수 있습니다. 예를 들어 보는 것이 가장 쉽습니다.

function concatenate($transform, ...$strings) {
    $string = '';
    foreach($strings as $piece) {
        $string .= $piece;
    }
    return($transform($string));
}

echo concatenate("strtoupper", "I'd ", "like ", 4 + 2, " apples");
// This would print:
// I'D LIKE 6 APPLES

함수 선언의 매개 변수 목록에는 ...연산자가 포함되어 있으며 기본적으로 "... 그리고 다른 모든 것은 $ strings에 들어가야합니다"를 의미합니다. 2 개 이상의 인수를이 함수에 전달할 수 있으며 두 번째 및 후속 인수는 사용할 준비가 된 $ strings 배열에 추가됩니다.

도움이 되었기를 바랍니다!


모든 답변은 동일한 블로그 게시물을 참조하며, 가변 길이 인수 목록에 대한 공식 문서 다음과 같습니다.

http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

PHP 5.6 이상에서 인수 목록에는 함수가 가변 개수의 인수를 허용 함을 나타내는 ... 토큰이 포함될 수 있습니다. 인수는 주어진 변수에 배열로 전달됩니다.

"splat"연산자는 공식 이름이 아닌 것 같지만 여전히 귀엽습니다!


이 기능을 사용하려면 PHP에 ... operator. 자세한 내용은 여기참조 하십시오 . 간단한 예는 다음과 같습니다.

$email[] = "Hi there";
$email[] = "Thanks for registering, hope you like it";

mail("someone@example.com", ...$email);

이것은 소위 "splat"연산자입니다. 기본적으로 그것은 "임의의 인수"로 번역됩니다. PHP 5.6에 도입

자세한 내용은 여기참조 하십시오 .


아무도 언급하지 않은 것 같으므로 여기에 머물러야합니다 [ PHP에서 나머지 매개 변수 를 요청하는 Google (및 기타 SE) 가이드 개발자에게도 도움이 될 것입니다 ] :

여기에 표시된대로 JS의 Rest Parameters 라고 하며, 그 표시보다 의미있는 이름 지정을 선호합니다!

PHP에서는 ... args제공하는 기능 을 PHP5.6에 도입 된 Variadic 함수 라고 합니다. 를 사용하여 동일한 기능을 구현하는 데 사용되었습니다 func_get_args().

적절하게 사용하려면 상용구 코드를 줄이는 데 도움이되는 모든 위치에서 나머지 매개 변수 구문을 사용해야 합니다 .


Magento 프레임 워크에서이 연산자의 사용법을 공유하고 싶습니다. 여기서 동적 구성 가능한 매개 변수 (XML 구성 파일로 간주)로 개체를 인스턴스화합니다.

우리가 볼 수 있듯이 createObject다음 코드 스 니펫에서 함수를 객체 생성을 위해 준비된 인수의 배열을받습니다. 그런 다음 ...(점 3 개) 연산자를 사용하여 배열 값을 클래스의 생성자에 실제 인수로 전달합니다.

<?php

namespace Magento\Framework\ObjectManager\Factory;

abstract class AbstractFactory implements \Magento\Framework\ObjectManager\FactoryInterface
{
    ...

    /**
     * Create object
     *
     * @param string $type
     * @param array $args
     *
     * @return object
     * @throws RuntimeException
     */
    protected function createObject($type, $args)
    {
        try {
            return new $type(...array_values($args));
        } catch (\TypeError $exception) {
            ...
        }
    }

    ...

}

줄임표 (...) PHP 토큰 에는 두 가지 용도 가 있습니다. 포장 배열을하고 풀고 배열을. 두 목적 모두 함수 인수에 적용됩니다.


When defining a function, if you need a dynamic number of variables provided to the function, (i.e., you don't know how many arguments will be provided to that function when called later in the code), use the ellipsis (...) token to capture all remaining arguments provided to that function into an array that is accessible inside the function block.

:

// function definition
function sum(...$numbers) { // use ellipsis token when defining function
    $acc = 0;
    foreach ($numbers as $n) {
        $acc += $n;
    }
    return $acc;
}

// later, call the function
echo sum(1, 2, 3, 4); // provide any number of arguments

> 10

// and again...
echo sum(1, 2, 3, 4, 5);

> 15

Unpack

또는 함수를 호출 할 때 해당 함수에 제공 한 인수가 이전에 배열로 결합 된 경우 줄임표 (...) 토큰을 사용합니다. to convert that array into an argument list provided to the function which assigns each array element to the respective function argument variable named in the function definition.

예를 들면 :

function add($a, $b) {
    return $a + $b;
}

$a = [1, 2];
echo add(...$a); // use ellipsis token when calling function

> 3

이것은 배열 함수를 사용할 때 특히 유용 합니다. to manipulate arrays or variables.

예를 들면 :

function toptwo ($first, $second) {
    echo "$first\n$second";
}

$steaks = array('ribeye', 'kc strip', 't-bone');
toptwo(...array_slice($steaks, 0, 2));

> ribeye
> kc strip

참고 URL : https://stackoverflow.com/questions/41124015/meaning-of-three-dot-in-php

반응형